vanilla-wow-addons – Rev 1
?pathlinks?
--[[--------------------------------------------------------------------------------
ItemSync Optimize Cleaner Framework
Author: Derkyle
Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]
local ISync_OptCount = 0;
local ISync_OptCount_Current = 0;
local ISync_Opt_List = { };
---------------------------------------------------
-- ISync:Optimize_Load
---------------------------------------------------
function ISync:Optimize_Load()
--initiate the timer variables
ISync_Optimize_Timer.Todo = {};
ISync_Optimize_Timer.Todo.n = 0;
end
---------------------------------------------------
-- ISync:Optimize_Update()
---------------------------------------------------
function ISync:Optimize_Update()
while(ISync_Optimize_Timer.Todo[1] and
ISync_Optimize_Timer.Todo[1].time <= GetTime()) do
--load the todo variable
local todo = table.remove(ISync_Optimize_Timer.Todo,1);
--check if there are arguments if so then load them
if(todo.args) then
todo.handler(unpack(todo.args));
--otherwise run the function
else
todo.handler();
end--if(todo.args) then
end--end while
end
---------------------------------------------------
-- ISync:Optimize_Add()
---------------------------------------------------
function ISync:Optimize_Add(when,handler,...)
--load the todo variable
local todo = {};
local i = 1;
--set the time so that we can determine time passed later
todo.time = when + GetTime();
--save the handler for processing later
todo.handler = handler;
--save the arguements if there are any
todo.args = arg;
--start the while loop
while(ISync_Optimize_Timer.Todo[i] and
--syncronize the time
ISync_Optimize_Timer.Todo[i].time < todo.time) do
i = i + 1;
end
--insert the finished product into the frame's todo array
table.insert(ISync_Optimize_Timer.Todo,i,todo);
end
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------
-- ISync:Optimize
---------------------------------------------------
function ISync:Optimize(sNum)
local upNum = 0;
local sParseLink;
local storeProcessedLink;
if(sNum == 0) then
ISync_Optimize_Timer.Todo = {};
ISync_Optimize_Timer.Todo.n = 0;
ISync_OptCount = 0;
ISync_OptCount_Current = 0;
ISync_Opt_List = nil;
ISync_Opt_List = { };
sNum = 1; --MAKE SURE TO SET THIS TO 1
end
--check on database
if(not ISyncDB) then return nil; end --the database should have been created
if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end --don't even bother
if(not sNum and ISync_OptCount_Current) then sNum = ISync_OptCount_Current; end
if(not sNum and ISync_OptCount_Current == 0) then return nil; end
if(not ISync_Opt_List) then ISync_Opt_List = { }; end
--disable the button
ISync_OptionsOptimizeButton:Disable();
--get the itemcount only if it hasn't been done already
if(ISync_OptCount == 0) then
--loop through items
for index, value in ISyncDB[ISYNC_REALM_NUM] do
--it's pointless to do subitems since they share the same basic stats
local sParseLink = ISync:FetchDB(index, "subitem");
if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0
table.insert(ISync_Opt_List, index..":0:0:0");
ISync_OptCount = ISync_OptCount + 1;
end--if(not sParseLink) then
end
--check for errors
if(not ISync_OptCount) then
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
end
--Enable the button
ISync_OptionsOptimizeButton:Enable();
return nil;
elseif(ISync_OptCount == 0) then
if( DEFAULT_CHAT_FRAME ) then
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: There were no items to process.");
end
--Enable the button
ISync_OptionsOptimizeButton:Enable();
return nil;
else
--set the status bar
ISync_Optimize_Bar:SetAlpha(1);
ISync_Optimize_BarFrameStatusBar:SetStatusBarColor(1, 1, 0);
ISync_Optimize_BarFrameStatusBar:SetMinMaxValues(0, ISync_OptCount);
ISync_Optimize_Bar:Show();
end
end
--CHECK AGAIN
--You cannot have an element of zero
if(sNum == 0) then sNum = 1; end
--check count
if(ISync_Opt_List[sNum]) then
--lets do 500 of them
for iCount=sNum , (sNum + 500) , 1 do
--increment
ISync_OptCount_Current = ISync_OptCount_Current + 1;
--do a check
if(ISync_Opt_List[iCount]) then
--check the data
ISync:Optimize_ChkData(ISync_Opt_List[iCount]);
--it doesn't exist so lets break
elseif(not ISync_Opt_List[iCount]) then
break; --break the for loop and end at the bottom
end
--check to repeat
if(ISync_Opt_List[iCount] and iCount >= (sNum + 500)) then
--fix the count
if(ISync_OptCount_Current > ISync_OptCount) then
ISync_Optimize_BarText:SetText( ISync_OptCount.."/"..ISync_OptCount );
else
ISync_Optimize_BarText:SetText( ISync_OptCount_Current.."/"..ISync_OptCount );
end
--do the value
ISync_Optimize_BarFrameStatusBar:SetValue(ISync_OptCount_Current);
ISync:Optimize_Add(7, ISync.Optimize, ISync_OptCount_Current);
return nil;
end
end--for iCount=sNum , (sNum + 500) , 1 do
end--if(ISync_Opt_List[sNum]) then
--clear out
ISync_Opt_List = nil;
ISync_Optimize_BarText:SetText( ISync_OptCount_Current.."/"..ISync_OptCount );
ISync_Optimize_BarFrameStatusBar:SetValue(ISync_OptCount_Current);
ISync_Optimize_Bar:Hide(); --hide it
DEFAULT_CHAT_FRAME:AddMessage("|c0000FF00ItemSync: "..ISYNC_OPTIMIZE_COMPLETE.."!");
--Enable the button
ISync_OptionsOptimizeButton:Enable();
end
---------------------------------------------------
-- ISync:Optimize_ChkData()
---------------------------------------------------
function ISync:Optimize_ChkData(sName)
if(not sName) then return nil; end
--attach variable
local index = sName;
local sParseLink;
local storeProcessedLink;
local storeLink;
---------------------------------------------------------------------------
if(index) then
--check link
local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index);
if(sName and link_X) then
ISync:Do_Parse(UIParent, ISyncTooltip, ISync:GetCoreID(index), link_X);
end--if(name_X and link_X and ISYNC_REALM_NUM) then
end
------------------------------------------------------------------------------
end