You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
2.3 KiB

4 years ago
local WIT, core = ...
local ExportHelper = {}
local LibBase64 = LibStub("LibBase64-1.0")
local AceSerializer = LibStub("AceSerializer-3.0")
core.ExportHelper = ExportHelper
local function GetProjectName(projectId)
return (projectId == WOW_PROJECT_MAINLINE and "Retail") or (projectId == WOW_PROJECT_CLASSIC and "Classic") or (projectId == WOW_PROJECT_BURNING_CRUSADE_CLASSIC and "TBCC") or "Unknown"
end
local function GetProjectLongName(projectId)
return (projectId == WOW_PROJECT_MAINLINE and "Retail WoW") or (projectId == WOW_PROJECT_CLASSIC and "Classic WoW") or (projectId == WOW_PROJECT_BURNING_CRUSADE_CLASSIC and "Burning Crusade Classic") or "Unknown WoW Type"
end
local function GetProjectId(projectName)
return (projectName =="Retail" and WOW_PROJECT_MAINLINE) or (projectName == "Classic" and WOW_PROJECT_CLASSIC) or (projectName == "TBCC" and WOW_PROJECT_BURNING_CRUSADE_CLASSIC)
end
local function GetFarmName(data)
if data.PetId then
return core.TSMHelper.GetItemName('p:'.. data.PetId)
elseif data.ItemId then
return core.TSMHelper.GetItemName(data.ItemId)
elseif data.NameMapId then
return core.LocationHelper.GetMapName(data.NameMapId)
else
return data.Name
end
end
local function StripSpecialChars(string)
return string:gsub("[;:+/=-.|]", " ")
end
function ExportHelper.Serialize(data)
local target = data.Routes and #(data.Routes) > 0 and "WorthIt+Routes" or "WorthIt"
local projectName = GetProjectName(WOW_PROJECT_ID)
local location = StripSpecialChars(core.LocationHelper.GetMapName(data.MapId))
local name = StripSpecialChars(GetFarmName(data))
return string.format("%s:%s:%s:%s:%s", projectName, target, name, location, LibBase64.Encode(AceSerializer:Serialize(data)))
end
function ExportHelper.Deserialize(exportString)
local sections = { strsplit(":", exportString) }
if #sections == 0 then return nil end
if #sections == 5 and GetProjectId(sections[1]) ~= WOW_PROJECT_ID then
print(string.format(core.GetString("ImportStringIncorrectGameType"), GetProjectLongName(GetProjectId(sections[1])), GetProjectLongName(WOW_PROJECT_ID)))
return nil
end
return AceSerializer:Deserialize(LibBase64.Decode(sections[#sections]))
end