vanilla-wow-addons – Rev 1

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

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

---------------------------------------------------
-- ISync:Filter_DD_SetSelectedID
---------------------------------------------------
function ISync:Filter_DD_SetSelectedID(frame, id, names)
        UIDropDownMenu_SetSelectedID(frame, id);
        if( not frame ) then
                frame = this;
        end
        UIDropDownMenu_SetText(names[id].name, frame);
end



---------------------------------------------------
-- ISync:Filter_DD_Load
---------------------------------------------------
function ISync:Filter_DD_Load()

        --rarity
        UIDropDownMenu_Initialize(ISync_FilterPurgeRare_DropDown, ISync.Filter_DD_Initialize);
        ISync:Filter_DD_SetSelectedID(ISync_FilterPurgeRare_DropDown, 1, ISYNC_DD_RARITY);
        UIDropDownMenu_JustifyText("LEFT", ISync_FilterPurgeRare_DropDown)      
end




---------------------------------------------------
-- ISync:Filter_DD_Initialize
---------------------------------------------------
function ISync:Filter_DD_Initialize()
        local info;
        for i = 1, getn(ISYNC_DD_RARITY), 1 do
                info = { };
                info.text = ISYNC_DD_RARITY[i].name;
                info.func = ISync.Filter_DD_OnClick;
                UIDropDownMenu_AddButton(info);
        end
        
        info = nil;
end


---------------------------------------------------
-- ISync:Filter_DD_OnClick
---------------------------------------------------
function ISync:Filter_DD_OnClick()
        UIDropDownMenu_SetSelectedID(ISync_FilterPurgeRare_DropDown, this:GetID());
end



--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------


---------------------------------------------------
--ISync:FilterPurgeInvalid
---------------------------------------------------
function ISync:FilterPurgeInvalid()

        --make sure we have stuff to work with duh
        if(not ISyncDB or not ISYNC_REALM_NUM) then return nil; end
        if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
        
        local index, value;

        --do the loop
        for index, value in ISyncDB[ISYNC_REALM_NUM] do

                sParseLink = ISync:FetchDB(index, "subitem");

                if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0

                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");

                        if(not name_X) then 
                        
                                ISyncDB[ISYNC_REALM_NUM][index] = nil;
                        end


                else --it has subitems

                        --make sure it's a table
                        if(type(sParseLink) == "table") then

                                for qindex, qvalue in sParseLink do

                                        --check
                                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:"..qvalue..":0");

                                        --do we have a valid item?
                                        if(not name_X) then

                                                ISync:SetDB(index, "subitem", qvalue, "TRUE"); --remove it from array
                                        end

                                end--for qindex, qvalue in sParseLink do
                                
                                --check again if we removed all of the subitems
                                sParseLink = ISync:FetchDB(index, "subitem");
                                
                                if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0

                                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");

                                        if(not name_X) then 

                                                ISyncDB[ISYNC_REALM_NUM][index] = nil;
                                        end

                                end
                

                        end--if(type(sParseLink) == "table") then

                end--if(not sParseLink) then

        end--for index, value in ISyncDB[ISync_RealmNum] do
        
        
        --call a refresh
        ISync:Main_Refresh();

        DEFAULT_CHAT_FRAME:AddMessage("|c00A2D96FItemSync: "..ISYNC_INVALIDPURGESUCCESS..".|r");

end



---------------------------------------------------
-- ISync:FilterPurge
---------------------------------------------------
function ISync:FilterPurge()
local storeRarity, sParseLink;

        --make sure we have stuff to work with duh
        if(not ISyncDB or not ISYNC_REALM_NUM) then return nil; end
        if(not ISyncDB[ISYNC_REALM_NUM]) then return nil; end
        
        local index, value;

        --grab rarity
        if( ISYNC_DD_RARITY[UIDropDownMenu_GetSelectedID(ISync_FilterPurgeRare_DropDown)].sortType ) then
        
                        local sortType = ISYNC_DD_RARITY[UIDropDownMenu_GetSelectedID(ISync_FilterPurgeRare_DropDown)].sortType;
                        
                        if( sortType == "NONE" ) then
                                storeRarity = nil;
                        else
                                storeRarity = sortType;
                        end
                        
                        
        end
        
        storeRarity = tonumber(storeRarity);
        
        if(not storeRarity) then
                DEFAULT_CHAT_FRAME:AddMessage("|c00A2D96FItemSync: "..ISYNC_FILTERINVALIDSELECTION..".|r");
                return nil;
        end
        
        --do the loop
        for index, value in ISyncDB[ISYNC_REALM_NUM] do

                sParseLink = ISync:FetchDB(index, "subitem");

                if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0

                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");

                        if(quality_X and quality_X == storeRarity) then 
                        
                                ISyncDB[ISYNC_REALM_NUM][index] = nil;
                        end


                else --it has subitems

                        --make sure it's a table
                        if(type(sParseLink) == "table") then

                                for qindex, qvalue in sParseLink do

                                        --check
                                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:"..qvalue..":0");

                                        --do we have a valid item?
                                        if(quality_X and quality_X == storeRarity) then

                                                ISync:SetDB(index, "subitem", qvalue, "TRUE"); --remove it from array
                                        end

                                end--for qindex, qvalue in sParseLink do
                                
                                --check again if we removed all of the subitems
                                sParseLink = ISync:FetchDB(index, "subitem");
                                
                                if(not sParseLink) then --this item has no subitems, cause it's subitem value = 0

                                        local name_X, link_X, quality_X, minLevel_X, class_X, subclass_X, maxStack_X = GetItemInfo("item:"..index..":0:0:0");

                                        if(quality_X and quality_X == storeRarity) then

                                                ISyncDB[ISYNC_REALM_NUM][index] = nil;
                                        end

                                end
                

                        end--if(type(sParseLink) == "table") then

                end--if(not sParseLink) then

        end--for index, value in ISyncDB[ISync_RealmNum] do
        
        
        --call a refresh
        ISync:Main_Refresh();

        DEFAULT_CHAT_FRAME:AddMessage("|c00A2D96FItemSync: "..ISYNC_FILTERPURGESUCCESS..".|r");

end




---------------------------------------------------
--ISync:Filter_MergeDB
---------------------------------------------------
function ISync:Filter_MergeDB()
        
        local ICountServ = 0;

        for ICountServ=0, tonumber(ISync:SetVar({"REALMS","REALMCOUNT"}, 0)) do
        
                --make sure it's not zero because zero is used a universal database number
                if(ICountServ ~= 0) then
                
                        --make sure we have a database to work with
                        if(ISyncDB and ISyncDB[ICountServ] and ISyncDB[0]) then
                        
                                for index, value in ISyncDB[ICountServ] do
                                
                                        --now check to see if we have in the universal database, if we don't add it
                                        --if we do then delete from other server
                                        if(not ISyncDB[0][index]) then
                                                
                                                --add it to universal zero
                                                ISyncDB[0][index] = value;

                                        end
                                        
                                
                                end
                                
                                        --now delete it
                                        ISyncDB[ICountServ] = nil;
                        end
                
                end
        
        end


        DEFAULT_CHAT_FRAME:AddMessage("|c00A2D96FItemSync: "..ISYNC_OPTIONS_SERVER_MERGECOMPLETE.."|r");
end