From 8b8d1ca74ce9addba75e65153e771111a6726b5b Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Wed, 23 Jun 2021 10:31:15 -0700
Subject: [PATCH 01/13] Implement market board purchase message reading
Originally from
https://github.com/Aireil/Dalamud/commit/d85146c0d9c911634228ee00bd2bf2eed9c8fb52
---
Dalamud/Game/Network/NetworkHandlers.cs | 40 +++++++++++--
.../Network/Structures/MarketBoardPurchase.cs | 40 +++++++++++++
.../Structures/MarketBoardPurchaseHandler.cs | 57 +++++++++++++++++++
3 files changed, 132 insertions(+), 5 deletions(-)
create mode 100644 Dalamud/Game/Network/Structures/MarketBoardPurchase.cs
create mode 100644 Dalamud/Game/Network/Structures/MarketBoardPurchaseHandler.cs
diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs
index 790ed57d5..c918d8b83 100644
--- a/Dalamud/Game/Network/NetworkHandlers.cs
+++ b/Dalamud/Game/Network/NetworkHandlers.cs
@@ -15,7 +15,7 @@ using Serilog;
namespace Dalamud.Game.Network
{
///
- /// This class handles network notifications and uploading Marketboard data.
+ /// This class handles network notifications and uploading market board data.
///
public class NetworkHandlers
{
@@ -23,6 +23,8 @@ namespace Dalamud.Game.Network
private readonly List marketBoardRequests = new();
+ private MarketBoardPurchaseHandler marketBoardPurchaseHandler;
+
private readonly bool optOutMbUploads;
private readonly IMarketBoardUploader uploader;
@@ -30,7 +32,7 @@ namespace Dalamud.Game.Network
/// Initializes a new instance of the class.
///
/// The Dalamud instance.
- /// Whether the client should opt out of marketboard uploads.
+ /// Whether the client should opt out of market board uploads.
public NetworkHandlers(Dalamud dalamud, bool optOutMbUploads)
{
this.dalamud = dalamud;
@@ -48,12 +50,22 @@ namespace Dalamud.Game.Network
private void OnNetworkMessage(IntPtr dataPtr, ushort opCode, uint sourceActorId, uint targetActorId, NetworkMessageDirection direction)
{
- if (direction != NetworkMessageDirection.ZoneDown)
- return;
-
if (!this.dalamud.Data.IsDataReady)
return;
+ if (direction == NetworkMessageDirection.ZoneUp)
+ {
+ if (!this.optOutMbUploads)
+ {
+ if (opCode == this.dalamud.Data.ClientOpCodes["MarketBoardPurchaseHandler"])
+ {
+ this.marketBoardPurchaseHandler = MarketBoardPurchaseHandler.Read(dataPtr);
+ }
+ }
+
+ return;
+ }
+
if (opCode == this.dalamud.Data.ServerOpCodes["CfNotifyPop"])
{
var data = new byte[64];
@@ -256,6 +268,24 @@ namespace Dalamud.Game.Network
Log.Error(ex, "Market Board data upload failed.");
}
}
+
+ if (opCode == this.dalamud.Data.ServerOpCodes["MarketBoardPurchase"])
+ {
+ if (this.marketBoardPurchaseHandler == null)
+ return;
+
+ var purchase = MarketBoardPurchase.Read(dataPtr);
+
+ // Transaction succeeded
+ if (purchase.ItemQuantity == this.marketBoardPurchaseHandler.ItemQuantity
+ && (purchase.CatalogId == this.marketBoardPurchaseHandler.CatalogId
+ || purchase.CatalogId == this.marketBoardPurchaseHandler.CatalogId + 1000000))
+ { // HQ
+ Log.Information("Bought " + purchase.ItemQuantity + "x " + this.marketBoardPurchaseHandler.CatalogId + " for " + (this.marketBoardPurchaseHandler.PricePerUnit * purchase.ItemQuantity) + " gils, listing id is " + this.marketBoardPurchaseHandler.ListingId);
+ }
+
+ this.marketBoardPurchaseHandler = null;
+ }
}
}
}
diff --git a/Dalamud/Game/Network/Structures/MarketBoardPurchase.cs b/Dalamud/Game/Network/Structures/MarketBoardPurchase.cs
new file mode 100644
index 000000000..ed8051154
--- /dev/null
+++ b/Dalamud/Game/Network/Structures/MarketBoardPurchase.cs
@@ -0,0 +1,40 @@
+using System;
+using System.IO;
+
+namespace Dalamud.Game.Network.Structures
+{
+ ///
+ /// Represents market board purchase information. This message is received from the
+ /// server when a purchase is made at a market board.
+ ///
+ internal class MarketBoardPurchase
+ {
+ ///
+ /// Gets the item ID of the item that was purchased.
+ ///
+ public uint CatalogId { get; private set; }
+
+ ///
+ /// Gets the quantity of the item that was purchased.
+ ///
+ public uint ItemQuantity { get; private set; }
+
+ ///
+ /// Reads market board purchase information from the struct at the provided pointer.
+ ///
+ /// A pointer to a struct containing market board purchase information from the server.
+ /// An object representing the data read.
+ public static unsafe MarketBoardPurchase Read(IntPtr dataPtr)
+ {
+ var output = new MarketBoardPurchase();
+
+ using var stream = new UnmanagedMemoryStream((byte*)dataPtr.ToPointer(), 1544);
+ using var reader = new BinaryReader(stream);
+ output.CatalogId = reader.ReadUInt32();
+ stream.Position += 4;
+ output.ItemQuantity = reader.ReadUInt32();
+
+ return output;
+ }
+ }
+}
diff --git a/Dalamud/Game/Network/Structures/MarketBoardPurchaseHandler.cs b/Dalamud/Game/Network/Structures/MarketBoardPurchaseHandler.cs
new file mode 100644
index 000000000..98d7007b0
--- /dev/null
+++ b/Dalamud/Game/Network/Structures/MarketBoardPurchaseHandler.cs
@@ -0,0 +1,57 @@
+using System;
+using System.IO;
+
+namespace Dalamud.Game.Network.Structures
+{
+ ///
+ /// Represents market board purchase information. This message is sent from the
+ /// client when a purchase is made at a market board.
+ ///
+ internal class MarketBoardPurchaseHandler
+ {
+ ///
+ /// Gets the object ID of the retainer associated with the sale.
+ ///
+ public ulong RetainerId { get; private set; }
+
+ ///
+ /// Gets the object ID of the item listing.
+ ///
+ public ulong ListingId { get; private set; }
+
+ ///
+ /// Gets the item ID of the item that was purchased.
+ ///
+ public uint CatalogId { get; private set; }
+
+ ///
+ /// Gets the quantity of the item that was purchased.
+ ///
+ public uint ItemQuantity { get; private set; }
+
+ ///
+ /// Gets the unit price of the item.
+ ///
+ public uint PricePerUnit { get; private set; }
+
+ ///
+ /// Reads market board purchase information from the struct at the provided pointer.
+ ///
+ /// A pointer to a struct containing market board purchase information from the client.
+ /// An object representing the data read.
+ public static unsafe MarketBoardPurchaseHandler Read(IntPtr dataPtr)
+ {
+ var output = new MarketBoardPurchaseHandler();
+
+ using var stream = new UnmanagedMemoryStream((byte*)dataPtr.ToPointer(), 1544);
+ using var reader = new BinaryReader(stream);
+ output.RetainerId = reader.ReadUInt64();
+ output.ListingId = reader.ReadUInt64();
+ output.CatalogId = reader.ReadUInt32();
+ output.ItemQuantity = reader.ReadUInt32();
+ output.PricePerUnit = reader.ReadUInt32();
+
+ return output;
+ }
+ }
+}
From a0e43517b532bc6b8e9b95f820a956e696e58f6f Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Fri, 25 Jun 2021 07:55:07 -0700
Subject: [PATCH 02/13] Implement partial upload process for MB purchases
---
.../IMarketBoardUploader.cs | 6 ++++++
.../UniversalisMarketBoardPurchaseRequest.cs | 9 +++++++++
.../UniversalisMarketBoardUploader.cs | 18 ++++++++++++++++++
Dalamud/Game/Network/NetworkHandlers.cs | 5 +++--
4 files changed, 36 insertions(+), 2 deletions(-)
create mode 100644 Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
index c6f2f0303..a5f507a24 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
@@ -18,5 +18,11 @@ namespace Dalamud.Game.Network.MarketBoardUploaders
///
/// The tax rate data being uploaded.
void UploadTax(MarketTaxRates taxRates);
+
+ ///
+ /// Upload information about a purchase this client has made.
+ ///
+ /// That thing with Louisiana.
+ void UploadPurchase(MarketBoardPurchase purchase);
}
}
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
new file mode 100644
index 000000000..d6f008ad9
--- /dev/null
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
@@ -0,0 +1,9 @@
+namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
+{
+ ///
+ /// Request payload for market board purchases.
+ ///
+ public class UniversalisMarketBoardPurchaseRequest
+ {
+ }
+}
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index cffa73491..49ecc45ad 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -136,5 +136,23 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
Log.Verbose("Universalis tax upload completed.");
}
+
+ ///
+ public void UploadPurchase(MarketBoardPurchase purchase)
+ {
+ using var client = new WebClient();
+ client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
+ client.Headers.Add(HttpRequestHeader.Authorization, ApiKey);
+
+ var purchaseRequest = new UniversalisMarketBoardPurchaseRequest();
+
+ var worldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
+
+ var purchaseUpload = JsonConvert.SerializeObject(purchaseRequest);
+ client.UploadString(ApiBase + $"/{purchase.CatalogId}/{worldId}/delete", "POST", purchaseUpload);
+ Log.Verbose(purchaseUpload);
+
+ Log.Verbose("Universalis tax upload completed.");
+ }
}
}
diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs
index c918d8b83..945627b83 100644
--- a/Dalamud/Game/Network/NetworkHandlers.cs
+++ b/Dalamud/Game/Network/NetworkHandlers.cs
@@ -23,11 +23,11 @@ namespace Dalamud.Game.Network
private readonly List marketBoardRequests = new();
- private MarketBoardPurchaseHandler marketBoardPurchaseHandler;
-
private readonly bool optOutMbUploads;
private readonly IMarketBoardUploader uploader;
+ private MarketBoardPurchaseHandler marketBoardPurchaseHandler;
+
///
/// Initializes a new instance of the class.
///
@@ -282,6 +282,7 @@ namespace Dalamud.Game.Network
|| purchase.CatalogId == this.marketBoardPurchaseHandler.CatalogId + 1000000))
{ // HQ
Log.Information("Bought " + purchase.ItemQuantity + "x " + this.marketBoardPurchaseHandler.CatalogId + " for " + (this.marketBoardPurchaseHandler.PricePerUnit * purchase.ItemQuantity) + " gils, listing id is " + this.marketBoardPurchaseHandler.ListingId);
+ Task.Run(() => this.uploader.UploadPurchase(purchase));
}
this.marketBoardPurchaseHandler = null;
From c9a1ca2c14fcb4853186905a9ec4fcefe187f04c Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sat, 24 Jul 2021 23:38:27 -0700
Subject: [PATCH 03/13] chore(Network): fix NetworkHandlers access modifier
(again)
---
Dalamud/Game/Network/NetworkHandlers.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs
index fe54249df..b2d3128f1 100644
--- a/Dalamud/Game/Network/NetworkHandlers.cs
+++ b/Dalamud/Game/Network/NetworkHandlers.cs
@@ -17,7 +17,7 @@ namespace Dalamud.Game.Network
///
/// This class handles network notifications and uploading market board data.
///
- public class NetworkHandlers
+ internal class NetworkHandlers
{
private readonly Dalamud dalamud;
From 6eb9dfefe1b9efeb095d0969513c86f338aea9ed Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sat, 24 Jul 2021 23:47:25 -0700
Subject: [PATCH 04/13] chore: add "Universalis" and "Uploaders" to dictionary
---
Dalamud.sln.DotSettings | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/Dalamud.sln.DotSettings b/Dalamud.sln.DotSettings
index 822d0841c..e63e37706 100644
--- a/Dalamud.sln.DotSettings
+++ b/Dalamud.sln.DotSettings
@@ -52,4 +52,6 @@
True
True
True
- True
\ No newline at end of file
+ True
+ True
+ True
\ No newline at end of file
From 89314e0c0ed0c9cea8d07f46f8548aac2cb04633 Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sat, 24 Jul 2021 23:59:31 -0700
Subject: [PATCH 05/13] feat(Network): implement full listing deletion process
---
.../IMarketBoardUploader.cs | 4 +-
.../UniversalisItemListingDeleteRequest.cs | 46 +++++++++++++++++++
.../UniversalisMarketBoardPurchaseRequest.cs | 9 ----
.../UniversalisMarketBoardUploader.cs | 19 ++++++--
Dalamud/Game/Network/NetworkHandlers.cs | 2 +-
5 files changed, 63 insertions(+), 17 deletions(-)
create mode 100644 Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
delete mode 100644 Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
index a5f507a24..9820ac237 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/IMarketBoardUploader.cs
@@ -22,7 +22,7 @@ namespace Dalamud.Game.Network.MarketBoardUploaders
///
/// Upload information about a purchase this client has made.
///
- /// That thing with Louisiana.
- void UploadPurchase(MarketBoardPurchase purchase);
+ /// The purchase handler data associated with the sale.
+ void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler);
}
}
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
new file mode 100644
index 000000000..d0101b0b9
--- /dev/null
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
@@ -0,0 +1,46 @@
+using Newtonsoft.Json;
+
+namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
+{
+ ///
+ /// Request payload for market board purchases.
+ ///
+ public class UniversalisItemListingDeleteRequest
+ {
+ ///
+ /// Gets or sets the object ID of the retainer associated with the sale.
+ ///
+ [JsonProperty("retainerID")]
+ public ulong RetainerId { get; set; }
+
+ ///
+ /// Gets or sets the object ID of the item listing.
+ ///
+ [JsonProperty("listingID")]
+ public ulong ListingId { get; set; }
+
+ ///
+ /// Gets or sets the item ID of the item that was purchased.
+ ///
+ [JsonProperty("itemID")]
+ public uint ItemId { get; set; }
+
+ ///
+ /// Gets or sets the quantity of the item that was purchased.
+ ///
+ [JsonProperty("quantity")]
+ public uint Quantity { get; set; }
+
+ ///
+ /// Gets or sets the unit price of the item.
+ ///
+ [JsonProperty("pricePerUnit")]
+ public uint PricePerUnit { get; set; }
+
+ ///
+ /// Gets or sets the uploader ID.
+ ///
+ [JsonProperty("uploaderID")]
+ public string UploaderId { get; set; }
+ }
+}
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
deleted file mode 100644
index d6f008ad9..000000000
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardPurchaseRequest.cs
+++ /dev/null
@@ -1,9 +0,0 @@
-namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
-{
- ///
- /// Request payload for market board purchases.
- ///
- public class UniversalisMarketBoardPurchaseRequest
- {
- }
-}
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 49ecc45ad..469d13f8a 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -138,21 +138,30 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
}
///
- public void UploadPurchase(MarketBoardPurchase purchase)
+ public void UploadPurchase(MarketBoardPurchaseHandler purchaseHandler)
{
using var client = new WebClient();
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
client.Headers.Add(HttpRequestHeader.Authorization, ApiKey);
- var purchaseRequest = new UniversalisMarketBoardPurchaseRequest();
-
+ var itemId = purchaseHandler.CatalogId;
var worldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
+ var purchaseRequest = new UniversalisItemListingDeleteRequest
+ {
+ ItemId = itemId,
+ PricePerUnit = purchaseHandler.PricePerUnit,
+ Quantity = purchaseHandler.ItemQuantity,
+ ListingId = purchaseHandler.ListingId,
+ RetainerId = purchaseHandler.RetainerId,
+ UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
+ };
+
var purchaseUpload = JsonConvert.SerializeObject(purchaseRequest);
- client.UploadString(ApiBase + $"/{purchase.CatalogId}/{worldId}/delete", "POST", purchaseUpload);
+ client.UploadString(ApiBase + $"/{itemId}/{worldId}/delete", "POST", purchaseUpload);
Log.Verbose(purchaseUpload);
- Log.Verbose("Universalis tax upload completed.");
+ Log.Verbose("Universalis purchase upload completed.");
}
}
}
diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs
index b2d3128f1..1a77830e4 100644
--- a/Dalamud/Game/Network/NetworkHandlers.cs
+++ b/Dalamud/Game/Network/NetworkHandlers.cs
@@ -282,7 +282,7 @@ namespace Dalamud.Game.Network
|| purchase.CatalogId == this.marketBoardPurchaseHandler.CatalogId + 1000000))
{ // HQ
Log.Information("Bought " + purchase.ItemQuantity + "x " + this.marketBoardPurchaseHandler.CatalogId + " for " + (this.marketBoardPurchaseHandler.PricePerUnit * purchase.ItemQuantity) + " gils, listing id is " + this.marketBoardPurchaseHandler.ListingId);
- Task.Run(() => this.uploader.UploadPurchase(purchase));
+ Task.Run(() => this.uploader.UploadPurchase(this.marketBoardPurchaseHandler));
}
this.marketBoardPurchaseHandler = null;
From 6768a3c0fcd4e71ef44fb9eccc4b69125558a712 Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 00:18:35 -0700
Subject: [PATCH 06/13] fix(Network): correct serialized types for delete
request
---
.../Universalis/UniversalisItemListingDeleteRequest.cs | 4 ++--
.../Universalis/UniversalisMarketBoardUploader.cs | 4 ++--
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
index d0101b0b9..54859fa20 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
@@ -11,13 +11,13 @@ namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
/// Gets or sets the object ID of the retainer associated with the sale.
///
[JsonProperty("retainerID")]
- public ulong RetainerId { get; set; }
+ public string RetainerId { get; set; }
///
/// Gets or sets the object ID of the item listing.
///
[JsonProperty("listingID")]
- public ulong ListingId { get; set; }
+ public string ListingId { get; set; }
///
/// Gets or sets the item ID of the item that was purchased.
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 469d13f8a..2c35f618e 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -152,8 +152,8 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
ItemId = itemId,
PricePerUnit = purchaseHandler.PricePerUnit,
Quantity = purchaseHandler.ItemQuantity,
- ListingId = purchaseHandler.ListingId,
- RetainerId = purchaseHandler.RetainerId,
+ ListingId = purchaseHandler.ListingId.ToString(),
+ RetainerId = purchaseHandler.RetainerId.ToString(),
UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
};
From 1789058e4548039f2adc63a70f56b83f06b7f433 Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 00:27:48 -0700
Subject: [PATCH 07/13] feat(Network): remove item ID from delete request body
---
.../Universalis/UniversalisItemListingDeleteRequest.cs | 6 ------
.../Universalis/UniversalisMarketBoardUploader.cs | 1 -
2 files changed, 7 deletions(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
index 54859fa20..f6994e60f 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisItemListingDeleteRequest.cs
@@ -19,12 +19,6 @@ namespace Dalamud.Game.Network.MarketBoardUploaders.Universalis
[JsonProperty("listingID")]
public string ListingId { get; set; }
- ///
- /// Gets or sets the item ID of the item that was purchased.
- ///
- [JsonProperty("itemID")]
- public uint ItemId { get; set; }
-
///
/// Gets or sets the quantity of the item that was purchased.
///
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 2c35f618e..7706057cf 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -149,7 +149,6 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
var purchaseRequest = new UniversalisItemListingDeleteRequest
{
- ItemId = itemId,
PricePerUnit = purchaseHandler.PricePerUnit,
Quantity = purchaseHandler.ItemQuantity,
ListingId = purchaseHandler.ListingId.ToString(),
From ce47ccb151bb4646e638b42d308ec19dd948d837 Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 10:34:21 -0700
Subject: [PATCH 08/13] fix(Network): swap world ID and item ID in URL
---
.../Universalis/UniversalisMarketBoardUploader.cs | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 7706057cf..c7786d5fe 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -157,7 +157,7 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
};
var purchaseUpload = JsonConvert.SerializeObject(purchaseRequest);
- client.UploadString(ApiBase + $"/{itemId}/{worldId}/delete", "POST", purchaseUpload);
+ client.UploadString(ApiBase + $"/{worldId}/{itemId}/delete", "POST", purchaseUpload);
Log.Verbose(purchaseUpload);
Log.Verbose("Universalis purchase upload completed.");
From c4d574732fcec73b58d9f9bbfdd8a1457ab09b8b Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 10:49:20 -0700
Subject: [PATCH 09/13] fix(Network): avoid passing null object into purchase
handler
---
Dalamud/Game/Network/NetworkHandlers.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/Dalamud/Game/Network/NetworkHandlers.cs b/Dalamud/Game/Network/NetworkHandlers.cs
index 1a77830e4..0b7aa7694 100644
--- a/Dalamud/Game/Network/NetworkHandlers.cs
+++ b/Dalamud/Game/Network/NetworkHandlers.cs
@@ -282,7 +282,8 @@ namespace Dalamud.Game.Network
|| purchase.CatalogId == this.marketBoardPurchaseHandler.CatalogId + 1000000))
{ // HQ
Log.Information("Bought " + purchase.ItemQuantity + "x " + this.marketBoardPurchaseHandler.CatalogId + " for " + (this.marketBoardPurchaseHandler.PricePerUnit * purchase.ItemQuantity) + " gils, listing id is " + this.marketBoardPurchaseHandler.ListingId);
- Task.Run(() => this.uploader.UploadPurchase(this.marketBoardPurchaseHandler));
+ var handler = this.marketBoardPurchaseHandler; // Capture the object so that we don't pass in a null one when the task starts.
+ Task.Run(() => this.uploader.UploadPurchase(handler));
}
this.marketBoardPurchaseHandler = null;
From a376b3da912c7fa34fa9d8d34bec486c5ebe600f Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 10:51:24 -0700
Subject: [PATCH 10/13] fix(Network): correct delete endpoint path
---
.../Universalis/UniversalisMarketBoardUploader.cs | 2 +-
build/build.csproj.DotSettings | 3 ++-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index c7786d5fe..1dc726696 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -157,7 +157,7 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
};
var purchaseUpload = JsonConvert.SerializeObject(purchaseRequest);
- client.UploadString(ApiBase + $"/{worldId}/{itemId}/delete", "POST", purchaseUpload);
+ client.UploadString(ApiBase + $"/api/{worldId}/{itemId}/delete", "POST", purchaseUpload);
Log.Verbose(purchaseUpload);
Log.Verbose("Universalis purchase upload completed.");
diff --git a/build/build.csproj.DotSettings b/build/build.csproj.DotSettings
index c8947fcec..7bc28484c 100644
--- a/build/build.csproj.DotSettings
+++ b/build/build.csproj.DotSettings
@@ -1,4 +1,4 @@
-
+
DO_NOT_SHOW
DO_NOT_SHOW
DO_NOT_SHOW
@@ -20,6 +20,7 @@
True
True
True
+ True
True
True
True
From 2adc01a953b30e90cde461a86527fa42e143866d Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 11:10:10 -0700
Subject: [PATCH 11/13] chore(Network): log before upload requests
---
.../Universalis/UniversalisMarketBoardUploader.cs | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 1dc726696..59f312196 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -78,8 +78,8 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
}
var upload = JsonConvert.SerializeObject(listingsRequestObject);
- client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", upload);
Log.Verbose(upload);
+ client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", upload);
var historyRequestObject = new UniversalisHistoryUploadRequest();
historyRequestObject.WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
@@ -103,8 +103,8 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
var historyUpload = JsonConvert.SerializeObject(historyRequestObject);
- client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
Log.Verbose(historyUpload);
+ client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
Log.Verbose("Universalis data upload for item#{0} completed.", request.CatalogId);
}
@@ -131,8 +131,8 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
var historyUpload = JsonConvert.SerializeObject(taxRatesRequest);
- client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
Log.Verbose(historyUpload);
+ client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
Log.Verbose("Universalis tax upload completed.");
}
@@ -156,9 +156,11 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
};
+ var requestPath = ApiBase + $"/api/{worldId}/{itemId}/delete";
var purchaseUpload = JsonConvert.SerializeObject(purchaseRequest);
- client.UploadString(ApiBase + $"/api/{worldId}/{itemId}/delete", "POST", purchaseUpload);
+ Log.Verbose($"Making request to {requestPath}");
Log.Verbose(purchaseUpload);
+ client.UploadString(requestPath, "POST", purchaseUpload);
Log.Verbose("Universalis purchase upload completed.");
}
From 7a1ce01cc52909964212123106cc27d42307b91a Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 11:11:17 -0700
Subject: [PATCH 12/13] chore(Network): use object initializers
---
.../UniversalisMarketBoardUploader.cs | 49 ++++++++++---------
1 file changed, 27 insertions(+), 22 deletions(-)
diff --git a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
index 59f312196..58c7810ad 100644
--- a/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
+++ b/Dalamud/Game/Network/MarketBoardUploaders/Universalis/UniversalisMarketBoardUploader.cs
@@ -41,12 +41,14 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
Log.Verbose("Starting Universalis upload.");
var uploader = this.dalamud.ClientState.LocalContentId;
- var listingsRequestObject = new UniversalisItemListingsUploadRequest();
- listingsRequestObject.WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
- listingsRequestObject.UploaderId = uploader.ToString();
- listingsRequestObject.ItemId = request.CatalogId;
+ var listingsRequestObject = new UniversalisItemListingsUploadRequest
+ {
+ WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
+ UploaderId = uploader.ToString(),
+ ItemId = request.CatalogId,
+ Listings = new List(),
+ };
- listingsRequestObject.Listings = new List();
foreach (var marketBoardItemListing in request.Listings)
{
var universalisListing = new UniversalisItemListingsEntry
@@ -62,9 +64,9 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
PricePerUnit = marketBoardItemListing.PricePerUnit,
Quantity = marketBoardItemListing.ItemQuantity,
RetainerCity = marketBoardItemListing.RetainerCityId,
+ Materia = new List(),
};
- universalisListing.Materia = new List();
foreach (var itemMateria in marketBoardItemListing.Materia)
{
universalisListing.Materia.Add(new UniversalisItemMateria
@@ -81,12 +83,14 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
Log.Verbose(upload);
client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", upload);
- var historyRequestObject = new UniversalisHistoryUploadRequest();
- historyRequestObject.WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
- historyRequestObject.UploaderId = uploader.ToString();
- historyRequestObject.ItemId = request.CatalogId;
+ var historyRequestObject = new UniversalisHistoryUploadRequest
+ {
+ WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
+ UploaderId = uploader.ToString(),
+ ItemId = request.CatalogId,
+ Entries = new List(),
+ };
- historyRequestObject.Entries = new List();
foreach (var marketBoardHistoryListing in request.History)
{
historyRequestObject.Entries.Add(new UniversalisHistoryEntry
@@ -114,18 +118,19 @@ namespace Dalamud.Game.Network.Universalis.MarketBoardUploaders
{
using var client = new WebClient();
- var taxRatesRequest = new UniversalisTaxUploadRequest();
- taxRatesRequest.WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
- taxRatesRequest.UploaderId = this.dalamud.ClientState.LocalContentId.ToString();
-
- taxRatesRequest.TaxData = new UniversalisTaxData
+ var taxRatesRequest = new UniversalisTaxUploadRequest
{
- LimsaLominsa = taxRates.LimsaLominsaTax,
- Gridania = taxRates.GridaniaTax,
- Uldah = taxRates.UldahTax,
- Ishgard = taxRates.IshgardTax,
- Kugane = taxRates.KuganeTax,
- Crystarium = taxRates.CrystariumTax,
+ WorldId = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0,
+ UploaderId = this.dalamud.ClientState.LocalContentId.ToString(),
+ TaxData = new UniversalisTaxData
+ {
+ LimsaLominsa = taxRates.LimsaLominsaTax,
+ Gridania = taxRates.GridaniaTax,
+ Uldah = taxRates.UldahTax,
+ Ishgard = taxRates.IshgardTax,
+ Kugane = taxRates.KuganeTax,
+ Crystarium = taxRates.CrystariumTax,
+ },
};
client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
From 835e6dc58e913666e2cd4827e962d44c4b4b9877 Mon Sep 17 00:00:00 2001
From: karashiiro <49822414+karashiiro@users.noreply.github.com>
Date: Sun, 25 Jul 2021 11:11:37 -0700
Subject: [PATCH 13/13] chore: add "Materia" to project dictionary
---
Dalamud.sln.DotSettings | 1 +
1 file changed, 1 insertion(+)
diff --git a/Dalamud.sln.DotSettings b/Dalamud.sln.DotSettings
index e63e37706..ba114a776 100644
--- a/Dalamud.sln.DotSettings
+++ b/Dalamud.sln.DotSettings
@@ -51,6 +51,7 @@
True
True
True
+ True
True
True
True