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(