Mercurial > wow > ouroloot
comparison core.lua @ 84:c87bf3e756f3
Properly handle dropdown menus for the History tab now, initially with delete-item and delete-player entries. Some code cleanup and notes for future work.
| author | Farmbuyer of US-Kilrogg <farmbuyer@gmail.com> |
|---|---|
| date | Thu, 21 Jun 2012 02:17:26 +0000 |
| parents | 940e53dd18c3 |
| children | 4771ee8eaa81 |
comparison
equal
deleted
inserted
replaced
| 83:940e53dd18c3 | 84:c87bf3e756f3 |
|---|---|
| 818 if e.kind == 'loot' then | 818 if e.kind == 'loot' then |
| 819 if e.history_unique then | 819 if e.history_unique then |
| 820 e.unique, e.history_unique = e.history_unique, nil | 820 e.unique, e.history_unique = e.history_unique, nil |
| 821 end | 821 end |
| 822 if e.unique == nil or #e.unique == 0 then | 822 if e.unique == nil or #e.unique == 0 then |
| 823 e.unique = e.id .. ' ' .. date("%Y/%m/%d %H:%M",e.stamp) | 823 e.unique = e.id .. e.person .. date("%Y/%m/%d %H:%M:%S",e.stamp) |
| 824 end | 824 end |
| 825 end | 825 end |
| 826 end | 826 end |
| 827 end | 827 end |
| 828 | 828 |
| 2264 -- DAY is a loot entry with kind=='time', and controls the date printed. | 2264 -- DAY is a loot entry with kind=='time', and controls the date printed. |
| 2265 -- LOOT may be any kind of entry in the g_loot table. If present, it | 2265 -- LOOT may be any kind of entry in the g_loot table. If present, it |
| 2266 -- overrides the hour and minute printed; if absent, those values are | 2266 -- overrides the hour and minute printed; if absent, those values are |
| 2267 -- taken from the DAY entry. | 2267 -- taken from the DAY entry. |
| 2268 -- FORMAT_STRING may contain $x (x in Y/M/D/h/m) tokens. | 2268 -- FORMAT_STRING may contain $x (x in Y/M/D/h/m) tokens. |
| 2269 -- FIXME this is horribabble | |
| 2269 local format_timestamp_values, point2dee = {}, "%.2d" | 2270 local format_timestamp_values, point2dee = {}, "%.2d" |
| 2270 function addon:format_timestamp (fmt_opt, day_entry, time_entry_opt) | 2271 function addon:format_timestamp (fmt_opt, day_entry, time_entry_opt) |
| 2271 if not time_entry_opt then | 2272 if not time_entry_opt then |
| 2272 if type(fmt_opt) == 'table' then -- Two entries, default format | 2273 if type(fmt_opt) == 'table' then -- Two entries, default format |
| 2273 time_entry_opt, day_entry = day_entry, fmt_opt | 2274 time_entry_opt, day_entry = day_entry, fmt_opt |
| 2463 B: winner was generated remotely | 2464 B: winner was generated remotely |
| 2464 >need to scan and replace | 2465 >need to scan and replace |
| 2465 Detecting A is strictly an optimization. We should be able to do | 2466 Detecting A is strictly an optimization. We should be able to do |
| 2466 this code safely in all cases. | 2467 this code safely in all cases. |
| 2467 ]] | 2468 ]] |
| 2468 if winning_index ~= 1 then | 2469 if |
| 2470 --@debug@ | |
| 2471 true or | |
| 2472 --@end-debug@ | |
| 2473 winning_index ~= 1 then | |
| 2469 --XXX this branch still needs to be tested with live data | 2474 --XXX this branch still needs to be tested with live data |
| 2470 local cache = g_uniques:SEARCH(exist) | 2475 local cache = g_uniques:SEARCH(exist) |
| 2471 local looti,hi,ui = cache.loot, cache.history, cache.history_may | 2476 local looti,hi,ui = cache.loot, cache.history, cache.history_may |
| 2472 | 2477 |
| 2473 -- Active loot | 2478 -- Active loot |
| 2870 local i,h = self:get_loot_history(e.person) | 2875 local i,h = self:get_loot_history(e.person) |
| 2871 local when = self:format_timestamp (g_today, e) | 2876 local when = self:format_timestamp (g_today, e) |
| 2872 | 2877 |
| 2873 -- If any of these change, update the end of history_handle_disposition. | 2878 -- If any of these change, update the end of history_handle_disposition. |
| 2874 if (not e.unique) or (#e.unique==0) then | 2879 if (not e.unique) or (#e.unique==0) then |
| 2875 e.unique = e.id .. ' ' .. when | 2880 e.unique = e.id .. e.person .. when |
| 2876 end | 2881 end |
| 2877 local U = e.unique | 2882 local U = e.unique |
| 2878 tinsert (h.unique, 1, U) | 2883 tinsert (h.unique, 1, U) |
| 2879 h.when[U] = when | 2884 h.when[U] = when |
| 2880 h.id[U] = e.id | 2885 h.id[U] = e.id |
| 3098 self:redisplay() | 3103 self:redisplay() |
| 3099 end | 3104 end |
| 3100 return index | 3105 return index |
| 3101 end | 3106 end |
| 3102 | 3107 |
| 3103 -- Similar to _addHistoryEntry. The second arg may be a loot entry | 3108 local function expunge (player, index_or_unique) |
| 3104 -- (which used to be at LOOTINDEX), or nil (and the loot entry will | 3109 local i,u |
| 3105 -- be pulled from LOOTINDEX instead). | 3110 if type(index_or_unique) == 'string' then |
| 3106 function addon:_delHistoryEntry (lootindex, opt_e) | 3111 for u = 1, #player.unique do |
| 3107 local e = opt_e or g_loot[lootindex] | 3112 if player.unique[u] == index_or_unique then |
| 3108 if e.kind ~= 'loot' then return end | 3113 i = u |
| 3109 | 3114 break |
| 3110 local from_i, from_h, hist_i = _history_by_loot_id (e, "delete") | 3115 end |
| 3116 end | |
| 3117 elseif type(index_or_unique) == 'number' then | |
| 3118 i = index_or_unique | |
| 3119 end | |
| 3120 if not i then | |
| 3121 return -- error here? | |
| 3122 end | |
| 3123 u = player.unique[i] | |
| 3124 assert(#u>0) | |
| 3125 tremove (player.unique, i) | |
| 3126 player.when[u], player.id[u], player.count[u] = nil, nil, nil | |
| 3127 g_uniques[u] = nil | |
| 3128 addon.hist_clean = nil | |
| 3129 end | |
| 3130 | |
| 3131 -- Mirror of _addHistoryEntry. Arguments are either: | |
| 3132 -- E - loot entry | |
| 3133 -- U,ITEM - unique tag, and a name/itemlink for errors | |
| 3134 -- Returns true on success. | |
| 3135 function addon:_delHistoryEntry (first, second) | |
| 3136 if type(first) == 'table' then | |
| 3137 second = first.itemlink or second | |
| 3138 --elseif type(first) == 'string' then | |
| 3139 end | |
| 3140 | |
| 3141 local from_i, from_h, hist_i = _history_by_loot_id (first, "delete") | |
| 3142 | |
| 3111 if not from_i then | 3143 if not from_i then |
| 3112 -- from_h is the formatted error text | 3144 -- from_h is the formatted error text |
| 3113 self:Print(from_h .. " Loot will be deleted, but history will NOT be updated.", e.itemlink) | 3145 return nil, (from_h |
| 3114 return | 3146 .." Loot will be deleted, but history will NOT be updated." |
| 3115 end | 3147 ):format(second) |
| 3116 | 3148 end |
| 3117 local hist_u = tremove (from_h.unique, hist_i) | 3149 |
| 3118 from_h.when[hist_u] = nil | 3150 expunge (from_h, hist_i) |
| 3119 from_h.id[hist_u] = nil | 3151 return true |
| 3120 from_h.count[hist_u] = nil | |
| 3121 g_uniques[hist_u] = nil | |
| 3122 self.hist_clean = nil | |
| 3123 | |
| 3124 self:Print("Removed history entry %d/%s from '%s'.", lootindex, e.itemlink, e.person) | |
| 3125 end | 3152 end |
| 3126 | 3153 |
| 3127 -- Any extra work for the "Mark as <x>" dropdown actions. The | 3154 -- Any extra work for the "Mark as <x>" dropdown actions. The |
| 3128 -- corresponding <x> will already have been assigned in the loot entry. | 3155 -- corresponding <x> will already have been assigned in the loot entry. |
| 3129 local deleted_cache = {} | 3156 local deleted_cache = {} |
| 3139 local name = e.person | 3166 local name = e.person |
| 3140 | 3167 |
| 3141 if (newdisp == 'shard' or newdisp == 'gvault') then | 3168 if (newdisp == 'shard' or newdisp == 'gvault') then |
| 3142 local name_i, name_h, hist_i = _history_by_loot_id (e, "mark") | 3169 local name_i, name_h, hist_i = _history_by_loot_id (e, "mark") |
| 3143 -- remove history entry if it exists | 3170 -- remove history entry if it exists |
| 3171 -- FIXME revist this and use expunge | |
| 3144 if hist_i then | 3172 if hist_i then |
| 3145 local c = flib.new() | 3173 local c = flib.new() |
| 3146 local hist_u = tremove (name_h.unique, hist_i) | 3174 local hist_u = tremove (name_h.unique, hist_i) |
| 3147 c.when = name_h.when[hist_u] | 3175 c.when = name_h.when[hist_u] |
| 3148 c.id = name_h.id[hist_u] | 3176 c.id = name_h.id[hist_u] |
| 3172 -- cache of stuff we've already deleted; if it's not there then just do | 3200 -- cache of stuff we've already deleted; if it's not there then just do |
| 3173 -- the same steps as _addHistoryEntry. | 3201 -- the same steps as _addHistoryEntry. |
| 3174 -- FIXME The deleted cache isn't nearly as useful now with the new data structures. | 3202 -- FIXME The deleted cache isn't nearly as useful now with the new data structures. |
| 3175 local when | 3203 local when |
| 3176 if (not e.unique) or (#e.unique==0) then | 3204 if (not e.unique) or (#e.unique==0) then |
| 3177 when = g_today and self:format_timestamp (g_today, e) or date("%Y/%m/%d %H:%M",e.stamp) | 3205 when = g_today and self:format_timestamp (g_today, e) or date("%Y/%m/%d %H:%M:%S",e.stamp) |
| 3178 e.unique = e.id .. ' ' .. when | 3206 e.unique = e.id .. name .. when |
| 3179 end | 3207 end |
| 3180 local U = e.unique | 3208 local U = e.unique |
| 3181 local c = deleted_cache[U] | 3209 local c = deleted_cache[U] |
| 3182 deleted_cache[U] = nil | 3210 deleted_cache[U] = nil |
| 3183 name_h.unique[#name_h.unique+1] = U | 3211 name_h.unique[#name_h.unique+1] = U |
| 3184 name_h.when[U] = c and c.when or when or date("%Y/%m/%d %H:%M",e.stamp) | 3212 name_h.when[U] = c and c.when or when or date("%Y/%m/%d %H:%M:%S",e.stamp) |
| 3185 name_h.id[U] = e.id -- c.id | 3213 name_h.id[U] = e.id -- c.id |
| 3186 name_h.count[U] = c and c.count or e.count | 3214 name_h.count[U] = c and c.count or e.count |
| 3187 sort_player(name_h) | 3215 sort_player(name_h) |
| 3188 g_uniques[U] = { loot = index, history = name_i } | 3216 g_uniques[U] = { loot = index, history = name_i } |
| 3189 self.hist_clean = nil | 3217 self.hist_clean = nil |
