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.
58 lines
2.3 KiB
58 lines
2.3 KiB
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
|
|
|