Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Locales/enUS.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ COLLECTIONATOR_LOCALES.enUS = function()
L["TMOGS_BUTTON"] = "TMogs"
L["PETS_BUTTON"] = "Pets"
L["TOYS_BUTTON"] = "Toys"
L["DECOR_BUTTON"] = "Decor"
L["MOUNTS_BUTTON"] = "Mounts"
L["RECIPES_BUTTON"] = "Recipes"
L["TMOG_SHOW_ALL_SOURCES"] = "Show all sources"
Expand All @@ -19,6 +20,7 @@ COLLECTIONATOR_LOCALES.enUS = function()
L["PET_NOT_ALL_25"] = "Pets you don't have a level 25"
L["TOY_INCLUDE_COLLECTED"] = "Include collected toys"
L["TOY_INCLUDE_UNUSABLE"] = "Include unusable toys"
L["DECOR_INCLUDE_COLLECTED"] = "Include collected decor"
L["MOUNT_INCLUDE_COLLECTED"] = "Include collected mounts"
L["SHOWING_X_RESULTS"] = "Showing %s results"
L["TYPE"] = "Type"
Expand Down
2 changes: 2 additions & 0 deletions Source/Constants.lua
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@ Collectionator.Constants = {
TOY_SCAN_STEP_SIZE = 1000,
TMOG_SCAN_STEP_SIZE = 500,
MOUNT_SCAN_STEP_SIZE = 1000,
DECOR_SCAN_STEP_SIZE = 1000,
RECIPE_SCAN_STEP_SIZE = 1000,

SummaryScanTMogStepSize = 250,
SummaryScanPetStepSize = 500,
SummaryScanToyStepSize = 500,
SummaryScanMountStepSize = 500,
SummaryScanDecorStepSize = 500,
SummaryScanRecipeStepSize = 500,

ITEM_SORTS = {{sortOrder = Enum.AuctionHouseSortOrder.Buyout, reverseSort = false}},
Expand Down
7 changes: 7 additions & 0 deletions Source/Events.lua
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,13 @@ Collectionator.Events = {
SummaryMountLoadStart = "collecting_summary_mounts_start",
SummaryMountLoadEnd = "collecting_summary_mounts_end",

DecorLoadStart = "collecting_replicate_decor_start",
DecorLoadEnd = "collecting_replicate_decor_end",
DecorPurchased = "decor_purchased",

SummaryDecorLoadStart = "collecting_summary_decor_start",
SummaryDecorLoadEnd = "collecting_summary_decor_end",

RecipeLoadStart = "collecting_replicate_recipes_start",
RecipeLoadEnd = "collecting_replicate_recipes_end",
RecipePurchased = "recipe_purchased",
Expand Down
25 changes: 17 additions & 8 deletions Source/PurchaseWatch/Frame.lua
Original file line number Diff line number Diff line change
Expand Up @@ -69,14 +69,15 @@ function CollectionatorPurchaseWatchFrameMixin:ReceiveEvent(eventName, ...)
end

function CollectionatorPurchaseWatchFrameMixin:ResetData()
COLLECTIONATOR_PURCHASES = {
TMog = {},
Pets = {},
Toys = {},
Mounts = {},
Recipes = {},
Version = PURCHASE_WATCH_VERSION,
}
COLLECTIONATOR_PURCHASES = {
TMog = {},
Pets = {},
Toys = {},
Mounts = {},
Decor = {},
Recipes = {},
Version = PURCHASE_WATCH_VERSION,
}
Collectionator.State.Purchases = COLLECTIONATOR_PURCHASES
end

Expand Down Expand Up @@ -108,6 +109,8 @@ function CollectionatorPurchaseWatchFrameMixin:HideItem(itemLink)
self:ProcessToyDetails(itemID)
elseif classID == Enum.ItemClass.Miscellaneous and subClassID == Enum.ItemMiscellaneousSubclass.Mount then
self:ProcessMountDetails(itemID)
elseif C_HousingCatalog and C_HousingCatalog.GetCatalogEntryInfoByItem(itemID, false) then
self:ProcessDecorDetails(itemID)
elseif classID == Enum.ItemClass.Recipe then
self:ProcessRecipeDetails(itemID)
end
Expand Down Expand Up @@ -161,6 +164,12 @@ function CollectionatorPurchaseWatchFrameMixin:ProcessMountDetails(itemID)
Auctionator.EventBus:Fire(self, Collectionator.Events.MountPurchased)
end

function CollectionatorPurchaseWatchFrameMixin:ProcessDecorDetails(itemID)
Collectionator.State.Purchases.Decor[itemID] = true

Auctionator.EventBus:Fire(self, Collectionator.Events.DecorPurchased)
end

function CollectionatorPurchaseWatchFrameMixin:ProcessRecipeDetails(itemID)
local spellID = COLLECTIONATOR_RECIPES_TO_IDS[itemID]

Expand Down
179 changes: 179 additions & 0 deletions Source/Replicate/DataProviders/Decor.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
local DECOR_TABLE_LAYOUT = {
{
headerTemplate = "AuctionatorStringColumnHeaderTemplate",
headerParameters = { "name" },
headerText = AUCTIONATOR_L_NAME,
cellTemplate = "AuctionatorItemKeyCellTemplate",
},
{
headerTemplate = "AuctionatorStringColumnHeaderTemplate",
headerText = AUCTIONATOR_L_QUANTITY,
headerParameters = { "quantity" },
cellTemplate = "AuctionatorStringCellTemplate",
cellParameters = { "quantity" },
width = 70
},
{
headerTemplate = "AuctionatorStringColumnHeaderTemplate",
headerText = AUCTIONATOR_L_UNIT_PRICE,
headerParameters = { "price" },
cellTemplate = "AuctionatorPriceCellTemplate",
cellParameters = { "price" },
width = 150,
},
}

CollectionatorReplicateDecorDataProviderMixin = CreateFromMixins(AuctionatorDataProviderMixin)

function CollectionatorReplicateDecorDataProviderMixin:OnLoad()
AuctionatorDataProviderMixin.OnLoad(self)

Auctionator.EventBus:Register(self, {
Collectionator.Events.DecorLoadStart,
Collectionator.Events.DecorLoadEnd,
Collectionator.Events.DecorPurchased,
})
Auctionator.EventBus:RegisterSource(self, "CollectionatorReplicateDecorDataProvider")

self.dirty = false
self.decor = {}
end

function CollectionatorReplicateDecorDataProviderMixin:OnShow()
self.focussedLink = nil
Auctionator.EventBus:Register(self, {
Collectionator.Events.ReplicateFocusLink,
})

if self.dirty then
self:Refresh()
end
end

function CollectionatorReplicateDecorDataProviderMixin:ReceiveEvent(eventName, eventData, eventData2)
if eventName == Collectionator.Events.DecorLoadStart then
self:Reset()
self.onSearchStarted()
self:GetParent().NoFullScanText:Hide()
self:GetParent().ShowingXResultsText:Hide()
elseif eventName == Collectionator.Events.DecorLoadEnd then
self.decor = eventData
self.fullScan = eventData2

self.dirty = true
if self:IsVisible() then
self:Refresh()
end
elseif eventName == Collectionator.Events.DecorPurchased then
self.dirty = true
if self:IsVisible() and not self:GetParent().IncludeCollected:GetChecked() then
self:Refresh()
end
elseif eventName == Collectionator.Events.ReplicateFocusLink then
self.focussedLink = eventData
self.dirty = true
self:Refresh()
end
end

local COMPARATORS = {
price = Auctionator.Utilities.NumberComparator,
name = Auctionator.Utilities.StringComparator,
quantity = Auctionator.Utilities.NumberComparator,
}

function CollectionatorReplicateDecorDataProviderMixin:Sort(fieldName, sortDirection)
local comparator = COMPARATORS[fieldName](sortDirection, fieldName)

table.sort(self.results, function(left, right)
return comparator(left, right)
end)

self.onUpdate(self.results)
end

local function IsDecorCollected(itemID)
if not C_HousingCatalog then
return false
end
local catalogInfo = C_HousingCatalog.GetCatalogEntryInfoByItem(itemID, true)
if not catalogInfo or not catalogInfo.entryID then
return false
end
local entrySubtype = catalogInfo.entryID.entrySubtype
return entrySubtype == 2 or entrySubtype == 3
end

function CollectionatorReplicateDecorDataProviderMixin:Refresh()
if self.dirty then
self.onPreserveScroll()
else
self.onResetScroll()
end

self.dirty = false
self:Reset()

self.onSearchStarted()

local filtered = Collectionator.Utilities.ReplicateExtractWantedItems(Collectionator.Utilities.ReplicateGroupedByID(self.decor, self.fullScan), self.fullScan)
local results = {}

-- Filter decor
for _, decorInfo in ipairs(filtered) do
local info = self.fullScan[decorInfo.index]

local check = true

if not self:GetParent().IncludeCollected:GetChecked() then
check = check and not IsDecorCollected(decorInfo.id)
if Collectionator.State.Purchases and Collectionator.State.Purchases.Decor then
check = check and not Collectionator.State.Purchases.Decor[decorInfo.id]
end
end

local searchString = self:GetParent().TextFilter:GetText()
check = check and string.find(string.lower(info.replicateInfo[1]), string.lower(searchString), 1, true)

if check then
table.insert(results, {
index = decorInfo.index,
itemName = Collectionator.Utilities.ColorName(info.itemLink, info.replicateInfo[1]),
name = info.replicateInfo[1],
quantity = decorInfo.quantity,
price = Collectionator.Utilities.GetPrice(info.replicateInfo),
itemLink = info.itemLink, -- Used for tooltips
iconTexture = info.replicateInfo[2],
selected = info.itemLink == self.focussedLink,
})
end
end

self:GetParent().ShowingXResultsText:SetText(COLLECTIONATOR_L_SHOWING_X_RESULTS:format(#results))
self:GetParent().ShowingXResultsText:Show()

Collectionator.Utilities.SortByPrice(results, self.fullScan)
self:AppendEntries(results, true)
if self:IsVisible() then
Auctionator.EventBus:Fire(self, Collectionator.Events.ReplicateDisplayedResultsUpdated, results)
end
end

function CollectionatorReplicateDecorDataProviderMixin:UniqueKey(entry)
return tostring(entry.index)
end

function CollectionatorReplicateDecorDataProviderMixin:GetTableLayout()
return DECOR_TABLE_LAYOUT
end

Auctionator.Config.Create("COLLECTIONATOR_COLUMNS_DECOR", "collectionator_columns_decor", {})

function CollectionatorReplicateDecorDataProviderMixin:GetColumnHideStates()
return Auctionator.Config.Get(Auctionator.Config.Options.COLLECTIONATOR_COLUMNS_DECOR)
end


function CollectionatorReplicateDecorDataProviderMixin:GetRowTemplate()
return "CollectionatorReplicateToyMountRowTemplate"
end
1 change: 1 addition & 0 deletions Source/Replicate/DataProviders/Manifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<Script file="TMogs.lua"/>
<Script file="Pets.lua"/>
<Script file="Toys.lua"/>
<Script file="Decor.lua"/>
<Script file="Mounts.lua"/>
<Script file="Recipes.lua"/>
</Ui>
31 changes: 31 additions & 0 deletions Source/Replicate/Scanner/Decor.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
CollectionatorReplicateDecorScannerFrameMixin = CreateFromMixins(CollectionatorReplicateScannerFrameMixin)

function CollectionatorReplicateDecorScannerFrameMixin:OnLoad()
CollectionatorReplicateScannerFrameMixin.OnLoad(self)

self.SCAN_START_EVENT = Collectionator.Events.DecorLoadStart
self.SCAN_END_EVENT = Collectionator.Events.DecorLoadEnd
self.SCAN_STEP = Collectionator.Constants.DECOR_SCAN_STEP_SIZE
end

function CollectionatorReplicateDecorScannerFrameMixin:GetSourceName()
return "CollectionatorReplicateDecorScannerFrameMixin"
end

function CollectionatorReplicateDecorScannerFrameMixin:GetItem(index, link, scanInfo)
local itemID = scanInfo.replicateInfo[17]

if not C_HousingCatalog then
return
end

local catalogInfo = C_HousingCatalog.GetCatalogEntryInfoByItem(itemID, false)
if not catalogInfo then
return
end

return {
index = index,
id = itemID,
}
end
7 changes: 7 additions & 0 deletions Source/Replicate/Scanner/Decor.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<Ui xmlns="http://www.blizzard.com/wow/ui/">
<Frame name="CollectionatorReplicateDecorScannerFrameTemplate" virtual="true" mixin="CollectionatorReplicateDecorScannerFrameMixin">
<Scripts>
<OnLoad method="OnLoad"/>
</Scripts>
</Frame>
</Ui>
2 changes: 2 additions & 0 deletions Source/Replicate/Scanner/Manifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
<Script file="TMog.lua" />
<Script file="Pet.lua" />
<Script file="Toy.lua" />
<Script file="Decor.lua" />
<Script file="Mount.lua" />
<Script file="Recipe.lua" />

<Include file="TMog.xml"/>
<Include file="Pet.xml"/>
<Include file="Toy.xml"/>
<Include file="Decor.xml"/>
<Include file="Mount.xml"/>
<Include file="Recipe.xml"/>
</Ui>
35 changes: 35 additions & 0 deletions Source/Replicate/Tab/DecorView.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
<Ui>
<Frame
name="CollectionatorReplicateDecorViewTemplate"
inherits="CollectionatorReplicateViewTemplate"
virtual="true"
>
<KeyValues>
<KeyValue key="queryType" value="OTHER" type="string"/>
</KeyValues>

<Frames>

<Frame inherits="CollectionatorReplicateDecorScannerFrameTemplate" parentKey="Scanner">
</Frame>

<Frame inherits="AuctionatorConfigurationCheckbox" parentKey="IncludeCollected">
<KeyValues>
<KeyValue key="labelText" value="COLLECTIONATOR_L_DECOR_INCLUDE_COLLECTED" type="global" />
</KeyValues>
<Anchors>
<Anchor point="TOPLEFT" relativeKey="$parent" relativePoint="TOPLEFT" y="90" x="270"/>
<Anchor point="RIGHT" relativeKey="$parent" relativePoint="LEFT" x="550"/>
</Anchors>
</Frame>

<Frame parentKey="DataProvider" mixin="CollectionatorReplicateDecorDataProviderMixin">
<Scripts>
<OnLoad method="OnLoad"/>
<OnShow method="OnShow"/>
<OnUpdate method="OnUpdate"/>
</Scripts>
</Frame>
</Frames>
</Frame>
</Ui>
8 changes: 8 additions & 0 deletions Source/Replicate/Tab/Main.lua
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ function CollectionatorReplicateTabFrameMixin:HideViews()
self.TMogView:Hide()
self.PetView:Hide()
self.ToyView:Hide()
self.DecorView:Hide()
self.MountView:Hide()
self.RecipeView:Hide()
end
Expand All @@ -21,6 +22,7 @@ function CollectionatorReplicateTabFrameMixin:ActivateButtons()
self.TMogButton:SetEnabled(not self.TMogView:IsShown())
self.PetButton:SetEnabled(not self.PetView:IsShown())
self.ToyButton:SetEnabled(not self.ToyView:IsShown())
self.DecorButton:SetEnabled(not self.DecorView:IsShown())
self.MountButton:SetEnabled(not self.MountView:IsShown())
self.RecipeButton:SetEnabled(not self.RecipeView:IsShown())
end
Expand All @@ -43,6 +45,12 @@ function CollectionatorReplicateTabFrameMixin:ToyMode()
self:ActivateButtons()
end

function CollectionatorReplicateTabFrameMixin:DecorMode()
self:HideViews()
self.DecorView:Show()
self:ActivateButtons()
end

function CollectionatorReplicateTabFrameMixin:MountMode()
self:HideViews()
self.MountView:Show()
Expand Down
Loading