diff --git a/Dalamud/Game/Network/Internal/MarketBoardUploaders/MarketBoardItemRequest.cs b/Dalamud/Game/Network/Internal/MarketBoardUploaders/MarketBoardItemRequest.cs index 7af647867..a32a92b13 100644 --- a/Dalamud/Game/Network/Internal/MarketBoardUploaders/MarketBoardItemRequest.cs +++ b/Dalamud/Game/Network/Internal/MarketBoardUploaders/MarketBoardItemRequest.cs @@ -30,6 +30,11 @@ internal class MarketBoardItemRequest /// public uint AmountToArrive { get; private set; } + /// + /// Gets or sets the offered catalog id used in this listing. + /// + public uint CatalogId { get; internal set; } + /// /// Gets the offered item listings. /// diff --git a/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs index a62de369b..5215cf030 100644 --- a/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs +++ b/Dalamud/Game/Network/Internal/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs @@ -48,7 +48,7 @@ internal class UniversalisMarketBoardUploader : IMarketBoardUploader { WorldId = clientState.LocalPlayer?.CurrentWorld.RowId ?? 0, UploaderId = uploader.ToString(), - ItemId = request.Listings.FirstOrDefault()?.CatalogId ?? 0, + ItemId = request.CatalogId, Listings = [], Sales = [], }; @@ -106,7 +106,7 @@ internal class UniversalisMarketBoardUploader : IMarketBoardUploader // ==================================================================================== - Log.Verbose("Universalis data upload for item#{CatalogId} completed", request.Listings.FirstOrDefault()?.CatalogId ?? 0); + Log.Verbose("Universalis data upload for item#{CatalogId} completed", request.CatalogId); } /// diff --git a/Dalamud/Game/Network/Internal/NetworkHandlers.cs b/Dalamud/Game/Network/Internal/NetworkHandlers.cs index ad8dbb600..2017be4bf 100644 --- a/Dalamud/Game/Network/Internal/NetworkHandlers.cs +++ b/Dalamud/Game/Network/Internal/NetworkHandlers.cs @@ -367,7 +367,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService })); } - private IObservable> OnMarketBoardSalesBatch( + private IObservable<(uint CatalogId, List Sales)> OnMarketBoardSalesBatch( IObservable start) { var historyObservable = this.MbHistoryObservable.Publish().RefCount(); @@ -390,6 +390,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService // When a start packet is observed, begin observing a window of history packets. // We should only get one packet, which the window closing function ensures. // This packet is flattened to its sale entries and emitted. + uint catalogId = 0; return historyObservable .Do(LogHistoryObserved) .Window(start, UntilBatchEnd) @@ -398,9 +399,12 @@ internal unsafe class NetworkHandlers : IInternalDisposableService new List(), (agg, next) => { + catalogId = next.CatalogId; + agg.AddRange(next.InternalHistoryListings); return agg; - })); + })) + .Select(o => (catalogId, o)); } private IDisposable HandleMarketBoardItemRequest() @@ -411,7 +415,8 @@ internal unsafe class NetworkHandlers : IInternalDisposableService } var startObservable = this.MbItemRequestObservable - .Where(request => request.Ok).Do(LogStartObserved) + .Where(request => request.Ok) + .Do(LogStartObserved) .Publish() .RefCount(); return Observable.When( @@ -432,10 +437,10 @@ internal unsafe class NetworkHandlers : IInternalDisposableService private void UploadMarketBoardData( MarketBoardItemRequest request, - ICollection sales, + (uint CatalogId, ICollection Sales) sales, ICollection listings) { - var catalogId = listings.FirstOrDefault()?.CatalogId ?? 0; + var catalogId = sales.CatalogId; if (listings.Count != request.AmountToArrive) { Log.Error( @@ -448,10 +453,11 @@ internal unsafe class NetworkHandlers : IInternalDisposableService "Market Board request resolved, starting upload: item#{CatalogId} listings#{ListingsObserved} sales#{SalesObserved}", catalogId, listings.Count, - sales.Count); + sales.Sales.Count); + request.CatalogId = catalogId; request.Listings.AddRange(listings); - request.History.AddRange(sales); + request.History.AddRange(sales.Sales); Task.Run(() => this.uploader.Upload(request)) .ContinueWith(