/// <inheritdoc/>
        public async Task Upload(MarketBoardItemRequest request)
        {
            var clientState = Service <ClientState.ClientState> .Get();

            Log.Verbose("Starting Universalis upload.");
            var uploader = clientState.LocalContentId;

            // ====================================================================================

            var listingsUploadObject = new UniversalisItemListingsUploadRequest
            {
                WorldId    = clientState.LocalPlayer?.CurrentWorld.Id ?? 0,
                UploaderId = uploader.ToString(),
                ItemId     = request.CatalogId,
                Listings   = new List <UniversalisItemListingsEntry>(),
            };

            foreach (var marketBoardItemListing in request.Listings)
            {
                var universalisListing = new UniversalisItemListingsEntry
                {
                    Hq             = marketBoardItemListing.IsHq,
                    SellerId       = marketBoardItemListing.RetainerOwnerId.ToString(),
                    RetainerName   = marketBoardItemListing.RetainerName,
                    RetainerId     = marketBoardItemListing.RetainerId.ToString(),
                    CreatorId      = marketBoardItemListing.ArtisanId.ToString(),
                    CreatorName    = marketBoardItemListing.PlayerName,
                    OnMannequin    = marketBoardItemListing.OnMannequin,
                    LastReviewTime = ((DateTimeOffset)marketBoardItemListing.LastReviewTime).ToUnixTimeSeconds(),
                    PricePerUnit   = marketBoardItemListing.PricePerUnit,
                    Quantity       = marketBoardItemListing.ItemQuantity,
                    RetainerCity   = marketBoardItemListing.RetainerCityId,
                    Materia        = new List <UniversalisItemMateria>(),
                };

                foreach (var itemMateria in marketBoardItemListing.Materia)
                {
                    universalisListing.Materia.Add(new UniversalisItemMateria
                    {
                        MateriaId = itemMateria.MateriaId,
                        SlotId    = itemMateria.Index,
                    });
                }

                listingsUploadObject.Listings.Add(universalisListing);
            }

            var listingPath   = "/upload";
            var listingUpload = JsonConvert.SerializeObject(listingsUploadObject);

            Log.Verbose($"{listingPath}: {listingUpload}");
            await Util.HttpClient.PostAsync($"{ApiBase}{listingPath}/{ApiKey}", new StringContent(listingUpload, Encoding.UTF8, "application/json"));

            // ====================================================================================

            var historyUploadObject = new UniversalisHistoryUploadRequest
            {
                WorldId    = clientState.LocalPlayer?.CurrentWorld.Id ?? 0,
                UploaderId = uploader.ToString(),
                ItemId     = request.CatalogId,
                Entries    = new List <UniversalisHistoryEntry>(),
            };

            foreach (var marketBoardHistoryListing in request.History)
            {
                historyUploadObject.Entries.Add(new UniversalisHistoryEntry
                {
                    BuyerName    = marketBoardHistoryListing.BuyerName,
                    Hq           = marketBoardHistoryListing.IsHq,
                    OnMannequin  = marketBoardHistoryListing.OnMannequin,
                    PricePerUnit = marketBoardHistoryListing.SalePrice,
                    Quantity     = marketBoardHistoryListing.Quantity,
                    Timestamp    = ((DateTimeOffset)marketBoardHistoryListing.PurchaseTime).ToUnixTimeSeconds(),
                });
            }

            var historyPath   = "/upload";
            var historyUpload = JsonConvert.SerializeObject(historyUploadObject);

            Log.Verbose($"{historyPath}: {historyUpload}");
            await Util.HttpClient.PostAsync($"{ApiBase}{historyPath}/{ApiKey}", new StringContent(historyUpload, Encoding.UTF8, "application/json"));

            // ====================================================================================

            Log.Verbose("Universalis data upload for item#{0} completed.", request.CatalogId);
        }
Example #2
0
        public void Upload(MarketBoardItemRequest request)
        {
            using (var client = new WebClient()) {
                client.Headers.Add(HttpRequestHeader.ContentType, "application/json");

                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;
                listingsRequestObject.ItemId     = request.CatalogId;

                listingsRequestObject.Listings = new List <UniversalisItemListingsEntry>();
                foreach (var marketBoardItemListing in request.Listings)
                {
                    var universalisListing = new UniversalisItemListingsEntry {
                        Hq             = marketBoardItemListing.IsHq,
                        SellerId       = marketBoardItemListing.RetainerOwnerId,
                        RetainerName   = marketBoardItemListing.RetainerName,
                        RetainerId     = marketBoardItemListing.RetainerId,
                        CreatorId      = marketBoardItemListing.ArtisanId,
                        CreatorName    = marketBoardItemListing.PlayerName,
                        OnMannequin    = marketBoardItemListing.OnMannequin,
                        LastReviewTime = ((DateTimeOffset)marketBoardItemListing.LastReviewTime).ToUnixTimeSeconds(),
                        PricePerUnit   = marketBoardItemListing.PricePerUnit,
                        Quantity       = marketBoardItemListing.ItemQuantity,
                        RetainerCity   = marketBoardItemListing.RetainerCityId
                    };

                    universalisListing.Materia = new List <UniversalisItemMateria>();
                    foreach (var itemMateria in marketBoardItemListing.Materia)
                    {
                        universalisListing.Materia.Add(new UniversalisItemMateria {
                            MateriaId = itemMateria.MateriaId,
                            SlotId    = itemMateria.Index
                        });
                    }

                    listingsRequestObject.Listings.Add(universalisListing);
                }

                var upload = JsonConvert.SerializeObject(listingsRequestObject);
                client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", upload);
                Log.Verbose(upload);

                var historyRequestObject = new UniversalisHistoryUploadRequest();
                historyRequestObject.WorldId    = this.dalamud.ClientState.LocalPlayer?.CurrentWorld.Id ?? 0;
                historyRequestObject.UploaderId = uploader;
                historyRequestObject.ItemId     = request.CatalogId;

                historyRequestObject.Entries = new List <UniversalisHistoryEntry>();
                foreach (var marketBoardHistoryListing in request.History)
                {
                    historyRequestObject.Entries.Add(new UniversalisHistoryEntry {
                        BuyerName    = marketBoardHistoryListing.BuyerName,
                        Hq           = marketBoardHistoryListing.IsHq,
                        OnMannequin  = marketBoardHistoryListing.OnMannequin,
                        PricePerUnit = marketBoardHistoryListing.SalePrice,
                        Quantity     = marketBoardHistoryListing.Quantity,
                        Timestamp    = ((DateTimeOffset)marketBoardHistoryListing.PurchaseTime).ToUnixTimeSeconds()
                    });
                }

                client.Headers.Add(HttpRequestHeader.ContentType, "application/json");

                var historyUpload = JsonConvert.SerializeObject(historyRequestObject);
                client.UploadString(ApiBase + $"/upload/{ApiKey}", "POST", historyUpload);
                Log.Verbose(historyUpload);

                Log.Verbose("Universalis data upload for item#{0} completed.", request.CatalogId);
            }
        }