diff Lists.lua @ 1:21c58930f74e

Refactoring
author John@Yosemite-PC
date Fri, 02 Mar 2012 22:32:12 -0500
parents 47fac96968e1
children 00286ba3b9c4
line wrap: on
line diff
--- a/Lists.lua	Fri Mar 02 00:15:09 2012 -0500
+++ b/Lists.lua	Fri Mar 02 22:32:12 2012 -0500
@@ -38,6 +38,16 @@
   return setmetatable(u, getmetatable(t))
 end
 
+-- Debugging {{{
+function bsk:PrintLists()
+    bsk:PrintTable(bsk.lists)
+end
+function bsk:PrintChanges()
+    bsk:PrintTable(bsk.db.profile.changes)
+end
+function bsk:PrintPlayers()
+    bsk:PrintTable(bsk.players)
+end
 function bsk:PrintTable(table, depth)
     depth = depth or ""
     if not table then return end
@@ -57,16 +67,6 @@
     end
 end
 
--- Debugging {{{
-function bsk:PrintLists()
-    bsk:PrintTable(bsk.lists)
-end
-function bsk:PrintChanges()
-    bsk:PrintTable(bsk.db.profile.changes)
-end
-function bsk:PrintPlayers()
-    bsk:PrintTable(bsk.players)
-end
 --}}}
 
 function bsk:CreateWorkingStateFromChanges()
@@ -159,7 +159,7 @@
     end 
 end
 
-
+-- Action and DoAction defs {{{
 --
 -- The actual actions for changes start here
 --
@@ -214,10 +214,6 @@
     end
 end
 
-function bsk:CreateFakeLists()
-    -- testing only
-end
-
 function bsk:DoCreateList(change)
     -- TODO: this segment will probably be useful as bsk:SearchForListByName
     local lists = bsk.lists
@@ -276,27 +272,6 @@
     -- from both players and lists
 end
 
-function bsk:GetSuicideList(name,list)
-    --self:Print("Calculating changeset for "..name.." from list -")
-    --self:PrintTable(list)
-    local t = {}
-    local ret = {}
-    local pushing = false
-    for i = 1, #list do
-        if list[i] == name then
-            pushing = true
-        end
-        if pushing and (RaidList[list[i]] or ReserveList[list[i]]) then
-            tinsert(ret,list[i])
-        end
-    end
-    return ret
-end
-
-function bsk:GetActiveList()
-    return bsk.lists[1] -- todo!
-end
-
 function bsk:DoSuicidePlayer(change)
     local listIndex = change.arg.listIndex
     local list = bsk.lists[listIndex]
@@ -324,16 +299,52 @@
 
 function bsk:SuicidePlayer(name,list)
     -- require admin
-    local l=bsk:GetActiveList()
     bsk:PopulateRaidList()
-    local slist=bsk:GetSuicideList(name,l)
     local listIndex = bsk:GetListIndex(list)
+    local slist=bsk:GetSuicideList(name,bsk.lists[listIndex])
     local change = {action="SuicidePlayer",arg={names=names,list=slist,listIndex=listIndex}}
     bsk:StartChange(change)
     if bsk:DoSuicidePlayer(change) then
        bsk:CommitChange(change)
     end
 end
+--}}}
+-- Higher order actions (ie calls other Doers){{{
+function bsk:AddMissingPlayers()
+    bsk:PopulateRaidList() 
+    local t = {}
+    for i,v in pairs(bsk.players) do
+        t[v] = true
+    end
+    for i,v in pairs(RaidList) do
+        if t[v] == nil then
+            bsk:Print(sformat("Player % is missing from the players list - adding",v))
+            bsk:AddPlayer(v)
+        end
+    end
+    -- TODO: batch into a single op - no need to spam 25 messages in a row
+end
+--}}}
+
+-- "Soft" actions- ie things that cause nonpermanent state {{{
+
+-- reserves
+function bsk:AddReserve(name)
+    ReserveList[name]=true
+    -- TODO: communicate to others. don't store this in any way.
+end
+
+function bsk:RemoveReserve(name)
+    ReserveList[name]=false
+    -- TODO: communicate to others. don't store this in any way.
+end
+
+
+--function bsk:GetActiveList()
+--    return bsk.lists[1] -- todo!
+--end
+
+--}}}
 
 -- The following code is from Xinhuan (wowace forum member)
 -- Pre-create the unitID strings we will use
@@ -375,25 +386,23 @@
 -- prevent proper undo, such as add/delete player or add/delete list
 
 
-
-
--- reserves
-function bsk:AddReserve(name)
-    ReserveList[name]=true
-    -- TODO: communicate to others. don't store this in any way.
+function bsk:GetSuicideList(name,list)
+    --self:Print("Calculating changeset for "..name.." from list -")
+    --self:PrintTable(list)
+    local t = {}
+    local ret = {}
+    local pushing = false
+    for i = 1, #list do
+        if list[i] == name then
+            pushing = true
+        end
+        if pushing and (RaidList[list[i]] or ReserveList[list[i]]) then
+            tinsert(ret,list[i])
+        end
+    end
+    return ret
 end
 
-function bsk:RemoveReserve(name)
-    ReserveList[name]=false
-    -- TODO: communicate to others. don't store this in any way.
-end
-
-
-
-
-
-
-
 
 
 -- Support functions
@@ -406,3 +415,4 @@
     end
     assert(false)
 end
+