vanilla-wow-addons – Rev 1

Subversion Repositories:
Rev:
--[[--------------------------------------------------------------------------------
  ItemSync CleanupDB Framework

  Author:  Derkyle
  Website: http://www.manaflux.com
-----------------------------------------------------------------------------------]]



---------------------------------------------------
-- ISync:CleanupDB()
---------------------------------------------------
function ISync:CleanupDB(sForce, sOpt)

        if( not ISyncDB ) then return nil; end
        if( not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
        if( not ISyncOpt["REALMS"] or not ISyncOpt["REALMS"]["REALMCOUNT"]) then return nil; end

        --save the old realm
        local saveOld_Realm = ISYNC_REALM_NUM;
        
        --loop through all the databases
        for i = 0, ISyncOpt["REALMS"]["REALMCOUNT"] , 1 do
        ---------------------------------
        
                ISYNC_REALM_NUM = i; --set the current realm
                
                --do the loop
                for qIndex, qValue in ISyncDB[ISYNC_REALM_NUM] do

                        --avoid the extremely old database
                        if(qIndex and tonumber(qIndex)) then
                                --do nothing
                        else

                                local sParseLink = string.gsub(qIndex, "^(%d+):(%d+):(%d+):(%d+)$", "%1");

                                if(sParseLink and tonumber(sParseLink)) then --numbered system so were okay                             
                                
                                        --do nothing
                                else
                                        --================================================================
                                        --ITEMID
                                        --start the converting process
                                        local s1, s2, sParseInfo = string.find(qValue, "»(.-)»"); --ITEMID


                                        local sID1, sID2, sGrabLink;
                                        local sChk = 0;

                                        --store the ITEMID
                                        if(sParseInfo) then

                                                --fix the itemid and remove the second and last digit
                                                sGrabLink = string.gsub(sParseInfo, "^(%d+):(%d+):(%d+):(%d+)$", "%1:0:%3:0");

                                                if(sGrabLink) then

                                                        sID1 = string.gsub(sGrabLink, "^(%d+):(%d+):(%d+):(%d+)$", "%1");
                                                        sID2 = string.gsub(sGrabLink, "^(%d+):(%d+):(%d+):(%d+)$", "%3");

                                                        --if we got both numbers then continue
                                                        if(sID1 and sID2 and tonumber(sID1) and tonumber(sID2)) then sChk = 1; end

                                                end

                                        end
                                        --================================================================


                                        --only allow if we have something to work with
                                        if(sChk == 1) then

                                                sChk = 0; --reset
                                                sID1 = tonumber(sID1);
                                                sID2 = tonumber(sID2);


                                                --check to see if we already have it
                                                if(ISyncDB[ISYNC_REALM_NUM][sID1]) then

                                                        --just add the subitem if we have one
                                                        ISync:SetDB(sID1, "subitem", sID2);

                                                        sChk = 0;

                                                else

                                                        if(sID2 ~= 0 and not ISync:FetchDB(sID1, "subitem", sID2)) then

                                                                --add it new if we have one
                                                                ISync:SetDB(sID1, "subitem", sID2);

                                                        end

                                                        sChk = 1;
                                                end



                                                if(sChk == 1) then

                                                        --================================================================
                                                        --INFO
                                                        --start the converting process
                                                        local s1, s2, sParseInfo = string.find(qValue, "¤(.-)¤");

                                                        if(sParseInfo) then

                                                                local yArray = ISync:SplitData(sParseInfo, ":");

                                                                if(yArray) then

                                                                        --loop through
                                                                        for sKey, sVar in yArray do

                                                                                if(sKey == 1) then ISync:SetDB(sID1, "quality", sVar); end
                                                                                if(sKey == 2) then ISync:SetDB(sID1, "price", sVar); end
                                                                                if(sKey == 3) then ISync:SetDB(sID1, "wl", sVar); end
                                                                                if(sKey == 4) then ISync:SetDB(sID1, "wt", sVar); end
                                                                                if(sKey == 5) then ISync:SetDB(sID1, "ts", sVar); end
                                                                                if(sKey == 6) then ISync:SetDB(sID1, "at", sVar); end
                                                                                if(sKey == 7) then ISync:SetDB(sID1, "st", sVar); end
                                                                                if(sKey == 8) then ISync:SetDB(sID1, "level", sVar); end
                                                                                if(sKey == 9) then ISync:SetDB(sID1, "vendor", sVar); end
                                                                                if(sKey == 10) then ISync:SetDB(sID1, "vendorqty", sVar); end

                                                                        end

                                                                end




                                                        end
                                                        --================================================================

                                                        --================================================================
                                                        --IDCHK
                                                        --start the converting process
                                                        local s1, s2, sParseInfo = string.find(qValue, "§(.-)§");

                                                        if(sParseInfo) then ISync:SetDB(sID1, "idchk", sParseInfo); end

                                                        --================================================================


                                                        --================================================================
                                                        --SUBITEM
                                                        --convert old subitems to independent items
                                                        local s1, s2, sParseInfo = string.find(qValue, "®(.-)®");

                                                        if(sParseInfo) then 

                                                                local qArray = ISync:SplitData(sParseInfo, "º");

                                                                if(qArray) then

                                                                        local qID1, qID2;

                                                                        for qKey, qVar in qArray do

                                                                                qID1 = string.gsub(qVar, "^(%d+):(%d+):(%d+):(%d+)$", "%1");
                                                                                qID2 = string.gsub(qVar, "^(%d+):(%d+):(%d+):(%d+)$", "%3");

                                                                                --check
                                                                                if(qID1 and qID2 and tonumber(qID1) and tonumber(qID2)) then

                                                                                        --create new and copy from the parent item
                                                                                        ISyncDB[ISYNC_REALM_NUM][tonumber(qID1)] = ISyncDB[ISYNC_REALM_NUM][tonumber(sID1)];

                                                                                        --store the subitem if we have one
                                                                                        ISync:SetDB(qID1, "subitem", qID2);
                                                                                end


                                                                        end--for sKey, sVar in yArray do

                                                                end--if(yArray) then

                                                        end

                                                        --================================================================


                                                end--if(sChk == 1) then

                                        end--if(sChk == 1) then




                                        --========================================================================================
                                        --========================================================================================
                                        --========================================================================================
                                        --========================================================================================

                                        --NEW CLEANUP FUNCTIONS AFTER VERSION 12


                                        --========================================================================================
                                        --========================================================================================
                                        --========================================================================================
                                        --========================================================================================


                                end--if(sParseLink and tonumber(sParseLink)) then


                        end--if(qIndex and tonumber(qIndex)) then


                end--for qIndex, qValue in ISyncDB[ISYNC_REALM_NUM] do
        

                --check if we need to delete
                if(sForce and sForce == 1) then

                        --delete the rows where the key isn't a number
                        for qIndex, qValue in ISyncDB[ISYNC_REALM_NUM] do

                                if(not tonumber(qIndex)) then
                                        ISyncDB[ISYNC_REALM_NUM][qIndex] = nil;
                                end
                        end
                end


                
                ---------------------------------
                --check multiple subitems
                for qIndex, qValue in ISyncDB[ISYNC_REALM_NUM] do
                
                        --make sure we have a numbered index
                        if(tonumber(qIndex)) then
                        
                                local yArray = ISync:FetchDB(qIndex, "subitem");
                                
                                --only do if we have subitems to work with
                                if(yArray) then
                                
                                        local list = { }; --temp
                                        local chkReplace = 0;

                                        --loop and add to temp, same numbers will just be replaced, thus removing duplicates
                                        for sKey, sVar in yArray do
                                                
                                                if(list[sVar]) then chkReplace = 1; end --turn on replace if we detected one
                                                
                                                list[sVar] = 1; --add to temp array
                                        end
                                        
                                        if(chkReplace == 1) then
                                        
                                                local subItemStr; --temp

                                                --loop again to create the string
                                                for xKey, xVar in list do
                                                
                                                        if(not subItemStr) then 
                                                                subItemStr = xKey;
                                                        elseif(subItemStr) then 
                                                                subItemStr = subItemStr.."º"..xKey;
                                                        end
                                                end
                                                
                                                --fix it
                                                ISync:SetDB(qIndex, "subitem", subItemStr, "REPLACE");
                                                
                                                subItemStr = nil;
                                        
                                        end--chkReplace
                                        
                
                                        list = nil;
                
                                end--if(yArray) then
                        
                        end--if(tonumber(qIndex)) then
                
                end--for qIndex, qValue in ISyncDB[ISYNC_REALM_NUM] do
                ---------------------------------
                
                
        ---------------------------------
        end--for i = 0, ISyncOpt["REALMS"]["REALMCOUNT"] , 1 do
        
        
        --return the old realm number
        ISYNC_REALM_NUM = saveOld_Realm;
        
        --show message
        DEFAULT_CHAT_FRAME:AddMessage("|c00A2D96FItemSync: |cffffffff"..ISYNC_CLEAN_SUCCESS.."|r");


end