Quantcast

Consolidated GetItemInfo calls.

Salvatore Lopiparo [07-25-16 - 23:35]
Consolidated GetItemInfo calls.
Filename
code.lua
diff --git a/code.lua b/code.lua
index 0103395..f65307f 100644
--- a/code.lua
+++ b/code.lua
@@ -290,14 +290,6 @@ CanIMogIt.cachedTooltipText = nil;
 -----------------------------


-function CanIMogIt:GetItemInfo(itemLink)
-	-- Calls GetItemInfo, but raises an error if it fails.
-	local result = {GetItemInfo(itemLink)}
-	if not result[1] then error("Waiting on GetItemInfo") end
-	return unpack(result)
-end
-
-
 function CanIMogIt:GetAppearances()
 	-- Gets a table of all the appearances known to a character.
 	C_TransmogCollection.ClearSearch()
@@ -320,36 +312,75 @@ function CanIMogIt:GetPlayerArmorTypeName()
 end


+function CanIMogIt:GetItemID(itemLink)
+	return tonumber(itemLink:match("item:(%d+)"))
+end
+
+
+function CanIMogIt:GetItemLink(itemID)
+	return select(2, CanIMogIt:GetItemInfo(itemID))
+end
+
+
+function CanIMogIt:GetItemQuality(itemID)
+	return select(3, GetItemInfo(itemID))
+end
+
+
+function CanIMogIt:GetItemMinLevel(itemLink)
+	return select(5, GetItemInfo(itemLink))
+end
+
+
+function CanIMogIt:GetItemClassName(itemLink)
+	return select(6, GetItemInfo(itemLink))
+end
+
+
+function CanIMogIt:GetItemSubClassName(itemLink)
+	return select(7, GetItemInfo(itemLink))
+end
+
+
+function CanIMogIt:GetItemSlotName(itemLink)
+	return select(9, GetItemInfo(itemLink))
+end
+
+
 function CanIMogIt:IsItemArmor(itemLink)
-	return GetItemClassInfo(4) == select(6, CanIMogIt:GetItemInfo(itemLink))
+	local itemClass = CanIMogIt:GetItemClassName(itemLink)
+	if not itemClass then return end
+	return GetItemClassInfo(4) == itemClass
 end


 function CanIMogIt:IsArmorSubClass(subClass, itemLink)
-	return select(1, GetItemSubClassInfo(4, subClass)) == select(7, CanIMogIt:GetItemInfo(itemLink))
+	local itemSubClass = CanIMogIt:GetItemSubClassName(itemLink)
+	if not itemSubClass then return end
+	return select(1, GetItemSubClassInfo(4, subClass)) == itemSubClass
 end


 function CanIMogIt:IsArmorSubClassIdentical(itemLinkA, itemLinkB)
-	return select(7, CanIMogIt:GetItemInfo(itemLinkA)) == select(7, CanIMogIt:GetItemInfo(itemLinkB))
+	local subClassA = CanIMogIt:GetItemSubClassName(itemLinkA)
+	local subClassB = CanIMogIt:GetItemSubClassName(itemLinkB)
+	if not subClassA or not subClassB then return end
+	return subClassA == subClassB
 end


 function CanIMogIt:IsArmorAppropriateForPlayer(itemLink)
 	local playerArmorTypeID = CanIMogIt:GetPlayerArmorTypeName()
-	if armorTypeSlots[CanIMogIt:GetSlotName(itemLink)] and not CanIMogIt:IsArmorSubClass(COSMETIC, itemLink) then
-		return playerArmorTypeID == select(7, CanIMogIt:GetItemInfo(itemLink))
+	local slotName = CanIMogIt:GetItemSlotName(itemLink)
+	if not slotName then return end
+	if armorTypeSlots[slotName] and not CanIMogIt:IsArmorSubClass(COSMETIC, itemLink) then
+		return playerArmorTypeID == CanIMogIt:GetItemSubClassName(itemLink)
 	else
 		return true
 	end
 end


-function CanIMogIt:GetSlotName(itemLink)
-	return select(9, CanIMogIt:GetItemInfo(itemLink))
-end
-
-
 function CanIMogIt:CharacterCanEquipItem(itemLink)
 	local itemID = CanIMogIt:GetItemID(itemLink)
 	for i=1,28 do
@@ -375,7 +406,8 @@ end


 function CanIMogIt:CharacterIsTooLowLevelForItem(itemLink)
-	local minLevel = select(5, CanIMogIt:GetItemInfo(itemLink))
+	local minLevel = CanIMogIt:GetItemMinLevel(itemLink)
+	if not minLevel then return end
 	return UnitLevel("player") < minLevel
 end

@@ -383,7 +415,8 @@ end
 function CanIMogIt:GetExceptionText(itemLink)
 	-- Returns the exception text for this item, if it has one.
 	local itemID = CanIMogIt:GetItemID(itemLink)
-	local slotName = CanIMogIt:GetSlotName(itemLink)
+	local slotName = CanIMogIt:GetItemSlotName(itemLink)
+	if not slotName then return end
 	local slotExceptions = exceptionItems[slotName]
 	if slotExceptions then
 		return slotExceptions[itemID]
@@ -393,7 +426,8 @@ end

 function CanIMogIt:IsEquippable(itemLink)
 	-- Returns whether the item is equippable or not (exluding bags)
-	local slotName = CanIMogIt:GetSlotName(itemLink)
+	local slotName = CanIMogIt:GetItemSlotName(itemLink)
+	if not slotName then return end
 	return slotName ~= "" and slotName ~= BAG
 end

@@ -466,7 +500,8 @@ end

 function CanIMogIt:CharacterCanLearnTransmog(itemLink)
 	-- Returns whether the player can learn the item or not.
-	if CanIMogIt:GetSlotName(itemLink) == TABARD then return true end
+	local slotName = CanIMogIt:GetItemSlotName(itemLink)
+	if slotName == TABARD then return true end
 	local source = CanIMogIt:GetSource(itemLink)
 	if source == nil then return false end
 	if select(2, C_TransmogCollection.PlayerCanCollectSource(source)) then
@@ -476,23 +511,18 @@ function CanIMogIt:CharacterCanLearnTransmog(itemLink)
 end


-function CanIMogIt:GetQuality(itemID)
-	-- Returns the quality of the item.
-	return select(3, CanIMogIt:GetItemInfo(itemID))
-end
-
-
 function CanIMogIt:IsTransmogable(itemLink)
 	-- Returns whether the item is transmoggable or not.

 	-- White items are not transmoggable.
-	local quality = CanIMogIt:GetQuality(itemLink)
+	local quality = CanIMogIt:GetItemQuality(itemLink)
+	if not quality then return end
 	if quality <= 1 then
 		return false
 	end

 	local is_misc_subclass = CanIMogIt:IsArmorSubClass(MISC, itemLink)
-	if is_misc_subclass and not miscArmorExceptions[CanIMogIt:GetSlotName(itemLink)] then
+	if is_misc_subclass and not miscArmorExceptions[CanIMogIt:GetItemSlotName(itemLink)] then
 		return false
 	end

@@ -518,16 +548,6 @@ function CanIMogIt:TextIsKnown(text)
 end


-function CanIMogIt:GetItemID(itemLink)
-	return tonumber(itemLink:match("item:(%d+)"))
-end
-
-
-function CanIMogIt:GetItemLink(itemID)
-	return select(2, CanIMogIt:GetItemInfo(itemID))
-end
-
-
 function CanIMogIt:GetTooltipText(itemLink)
 	-- Gets the text to display on the tooltip
 	local text = ""