Fix universalis upload with itemId 0 (#2077)

This commit is contained in:
Infi 2024-11-13 22:43:42 +01:00 committed by GitHub
parent 6052469976
commit 8668ea0d59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 20 additions and 9 deletions

View file

@ -30,6 +30,11 @@ internal class MarketBoardItemRequest
/// </summary> /// </summary>
public uint AmountToArrive { get; private set; } public uint AmountToArrive { get; private set; }
/// <summary>
/// Gets or sets the offered catalog id used in this listing.
/// </summary>
public uint CatalogId { get; internal set; }
/// <summary> /// <summary>
/// Gets the offered item listings. /// Gets the offered item listings.
/// </summary> /// </summary>

View file

@ -48,7 +48,7 @@ internal class UniversalisMarketBoardUploader : IMarketBoardUploader
{ {
WorldId = clientState.LocalPlayer?.CurrentWorld.RowId ?? 0, WorldId = clientState.LocalPlayer?.CurrentWorld.RowId ?? 0,
UploaderId = uploader.ToString(), UploaderId = uploader.ToString(),
ItemId = request.Listings.FirstOrDefault()?.CatalogId ?? 0, ItemId = request.CatalogId,
Listings = [], Listings = [],
Sales = [], 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);
} }
/// <inheritdoc/> /// <inheritdoc/>

View file

@ -367,7 +367,7 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
})); }));
} }
private IObservable<List<MarketBoardHistory.MarketBoardHistoryListing>> OnMarketBoardSalesBatch( private IObservable<(uint CatalogId, List<MarketBoardHistory.MarketBoardHistoryListing> Sales)> OnMarketBoardSalesBatch(
IObservable<MarketBoardItemRequest> start) IObservable<MarketBoardItemRequest> start)
{ {
var historyObservable = this.MbHistoryObservable.Publish().RefCount(); 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. // 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. // We should only get one packet, which the window closing function ensures.
// This packet is flattened to its sale entries and emitted. // This packet is flattened to its sale entries and emitted.
uint catalogId = 0;
return historyObservable return historyObservable
.Do(LogHistoryObserved) .Do(LogHistoryObserved)
.Window(start, UntilBatchEnd) .Window(start, UntilBatchEnd)
@ -398,9 +399,12 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
new List<MarketBoardHistory.MarketBoardHistoryListing>(), new List<MarketBoardHistory.MarketBoardHistoryListing>(),
(agg, next) => (agg, next) =>
{ {
catalogId = next.CatalogId;
agg.AddRange(next.InternalHistoryListings); agg.AddRange(next.InternalHistoryListings);
return agg; return agg;
})); }))
.Select(o => (catalogId, o));
} }
private IDisposable HandleMarketBoardItemRequest() private IDisposable HandleMarketBoardItemRequest()
@ -411,7 +415,8 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
} }
var startObservable = this.MbItemRequestObservable var startObservable = this.MbItemRequestObservable
.Where(request => request.Ok).Do(LogStartObserved) .Where(request => request.Ok)
.Do(LogStartObserved)
.Publish() .Publish()
.RefCount(); .RefCount();
return Observable.When( return Observable.When(
@ -432,10 +437,10 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
private void UploadMarketBoardData( private void UploadMarketBoardData(
MarketBoardItemRequest request, MarketBoardItemRequest request,
ICollection<MarketBoardHistory.MarketBoardHistoryListing> sales, (uint CatalogId, ICollection<MarketBoardHistory.MarketBoardHistoryListing> Sales) sales,
ICollection<MarketBoardCurrentOfferings.MarketBoardItemListing> listings) ICollection<MarketBoardCurrentOfferings.MarketBoardItemListing> listings)
{ {
var catalogId = listings.FirstOrDefault()?.CatalogId ?? 0; var catalogId = sales.CatalogId;
if (listings.Count != request.AmountToArrive) if (listings.Count != request.AmountToArrive)
{ {
Log.Error( Log.Error(
@ -448,10 +453,11 @@ internal unsafe class NetworkHandlers : IInternalDisposableService
"Market Board request resolved, starting upload: item#{CatalogId} listings#{ListingsObserved} sales#{SalesObserved}", "Market Board request resolved, starting upload: item#{CatalogId} listings#{ListingsObserved} sales#{SalesObserved}",
catalogId, catalogId,
listings.Count, listings.Count,
sales.Count); sales.Sales.Count);
request.CatalogId = catalogId;
request.Listings.AddRange(listings); request.Listings.AddRange(listings);
request.History.AddRange(sales); request.History.AddRange(sales.Sales);
Task.Run(() => this.uploader.Upload(request)) Task.Run(() => this.uploader.Upload(request))
.ContinueWith( .ContinueWith(