vanilla-wow-addons – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 -- --
2 BuddySync = AceLibrary("AceAddon-2.0"):new("AceEvent-2.0", "AceHook-2.0", "AceConsole-2.0", "AceDB-2.0", "AceModuleCore-2.0", "AceDebug-2.0")
3 -- --
4 local debugLevels = {"warn", "info", "notice", "off"}
5 -- --
6 BuddySync:RegisterDB("BuddySyncDB")
7 BuddySync:RegisterDefaults("profile", {Debug = nil})
8 -- --
9 function BuddySync:OnEnable()
10 --
11 this:RegisterEvent("CHAT_MSG_SYSTEM", "BS_onEVENT")
12 this:RegisterEvent("VARIABLES_LOADED", "BS_onEVENT")
13 this:RegisterEvent("FRIENDLIST_UPDATE", "BS_onEVENT")
14 --
15 self:HookScript(FriendsFrame, "OnShow", "BS_SET_SHOW")
16 self:HookScript(FriendsFrameAddFriendButton, "OnClick", "BS_ADD_FRIEND")
17 self:HookScript(FriendsFrameIgnorePlayerButton, "OnClick", "BS_ADD_IGNORE")
18 self:HookScript(FriendsFrameRemoveFriendButton, "OnClick", "BS_DELETE_FRIEND")
19 self:HookScript(FriendsFrameStopIgnoreButton, "OnClick", "BS_STOP_IGNORE")
20 self:HookScript(SendMailNameEditBox, "OnChar", "SendMailFrame_SendeeAutocomplete_EXPANDED")
21 --
22 end
23 -- --
24 function BuddySync:SendMailFrame_SendeeAutocomplete_EXPANDED()
25 --
26 local text = this:GetText();
27 local textlen = strlen(text);
28 local name;
29 --
30 if BuddySyncDB[BSR][TOON] then
31 if ( table.getn(BuddySyncDB[BSR][TOON]) > 0 ) then
32 for i=1, table.getn(BuddySyncDB[BSR][TOON]) do
33 name = BuddySyncDB[BSR][TOON][i];
34 if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
35 SendMailNameEditBox:SetText(name);
36 SendMailNameEditBox:HighlightText(textlen, -1);
37 return;
38 end
39 end
40 end
41 end
42 return self.hooks[SendMailNameEditBox]["OnChar"].orig()
43 --[[ the original part -- just to see how ...
44 local text = this:GetText();
45 local textlen = strlen(text);
46 local numFriends, name;
47  
48 -- First check your friends list
49 numFriends = GetNumFriends();
50 if ( numFriends > 0 ) then
51 for i=1, numFriends do
52 name = GetFriendInfo(i);
53 if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
54 this:SetText(name);
55 this:HighlightText(textlen, -1);
56 return;
57 end
58 end
59 end
60  
61 -- No match, check your guild list
62 numFriends = GetNumGuildMembers(true); -- true to include offline members
63 if ( numFriends > 0 ) then
64 for i=1, numFriends do
65 name = GetGuildRosterInfo(i);
66 if ( strfind(strupper(name), strupper(text), 1, 1) == 1 ) then
67 this:SetText(name);
68 this:HighlightText(textlen, -1);
69 return;
70 end
71 end
72 end
73 --]]
74 end
75 -- --
76 BuddySync:RegisterChatCommand({"/buddysync", "/bs"}, {
77 type = "group",
78 name = "BuddySync",
79 args = {
80 config = {
81 type = "execute",
82 name = "chat",
83 desc = "ChatOutput on/off",
84 func = function()
85 if (BuddySyncDB[BSR].OUTPUT == 0) then
86 BuddySyncDB[BSR].OUTPUT = 1;
87 else
88 BuddySyncDB[BSR].OUTPUT = 0;
89 end
90 end,
91 },
92 },
93 }, "BUDDYSYNC")
94 -- --
95 function BuddySync:BS_onEVENT(event)
96 --
97 if (event == "VARIABLES_LOADED") then
98 -- setting up some vars
99 BS_VER = "2.2.1";
100 BSR = GetRealmName();
101 pNAME = UnitName("player");
102 FRIEND = "FRIEND";
103 IGNORE = "IGNORE";
104 TOON = "TOON";
105 --
106 if (not BuddySyncDB[BSR].OUTPUT) then
107 BuddySyncDB[BSR].OUTPUT = 1;
108 end
109 --
110 if (not BuddySyncDB[BSR][TOON]) then
111 BuddySyncDB[BSR][TOON] = {};
112 end
113 --
114 for i=1, table.getn(BuddySyncDB[BSR][TOON]) do
115 if (BuddySyncDB[BSR][TOON][i] == pNAME) then
116 isIN = 1;
117 break;
118 else
119 isIN = nil;
120 end
121 end
122 --
123 if not isIN then
124 table.insert(BuddySyncDB[BSR][TOON], pNAME);
125 end
126 --
127 syncBTN = 0;
128 syncCOUNT = 0;
129 inamey = nil;
130 namey = nil;
131 IILT = 0;
132 BSFS = 0;
133 BSL = {};
134 iBSL = {};
135 i2BSL = {};
136 BSA = 0;
137 BSC = 0;
138 BSN = 0;
139 XDA = 0;
140 EFE = 0;
141 --
142 this:UnregisterEvent("VARIABLES_LOADED");
143 --
144 elseif (event == "FRIENDLIST_UPDATE" or event == "IGNORELIST_UPDATE") then
145 BuddySync:BS_FRIENDS();
146 elseif (event == "CHAT_MSG_SYSTEM") then
147 local BSX = BSSPLIT(getglobal("ERR_FRIEND_ADDED_S"), " ");
148 local BSY = BSSPLIT(getglobal("ERR_FRIEND_REMOVED_S"), " ");
149 local iBSX = BSSPLIT(getglobal("ERR_IGNORE_ADDED_S"), " ");
150 local iBSY = BSSPLIT(getglobal("ERR_IGNORE_REMOVED_S"), " ");
151 --
152 if (BSA == 0 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4]) or
153 strfind(arg1, BSY[2]) and strfind(arg1, BSY[3]) and strfind(arg1, BSY[4])) then
154 BuddySync:BS_CHECK(1);
155 elseif (BSA == 0 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then
156 local namex = BSSPLIT(arg1, " ");
157 local name = namex[1];
158 iBSL[name] = {}
159 iBSL[name].inIgnoreList = 1;
160 BuddySync:BS_onSYNC();
161 elseif (BSA == 0 and strfind(arg1, iBSY[2]) and strfind(arg1, iBSY[3]) and strfind(arg1, iBSY[4])) then
162 BuddySync:BS_onSYNC();
163 elseif (BSA == 1 and strfind(arg1, BSX[2]) and strfind(arg1, BSX[3]) and strfind(arg1, BSX[4])) then
164 local namex = BSSPLIT(arg1, " ");
165 local name = namex[1];
166 BSL[name] = {};
167 BSL[name].inFriendList = 1;
168 BuddySyncDB[BSR][FRIEND][name] = {};
169 BuddySyncDB[BSR][FRIEND][name].inFriendList = 1;
170 BuddySync:BS_CHECK(1);
171 elseif (BSA == 1 and strfind(arg1, iBSX[2]) and strfind(arg1, iBSX[3]) and strfind(arg1, iBSX[4])) then
172 local namex = BSSPLIT(arg1, " ");
173 local name = namex[1];
174 iBSL[name] = {};
175 iBSL[name].inIgnoreList = 1;
176 BuddySyncDB[BSR][IGNORE][name] = {};
177 BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1;
178 BuddySync:BS_onSYNC();
179 elseif (arg1 == getglobal("ERR_FRIEND_ERROR")) then
180 EFE = 1;
181 elseif (arg1 == getglobal("ERR_FRIEND_NOT_FOUND") and EFE == 0) then
182 BuddySync:BS_CHECK(0);
183 end
184 end
185 end
186 -- --
187 function BuddySync:BS_FRIENDS()
188 --
189 local numFriends = GetNumFriends();
190 local numIgnores = GetNumIgnores();
191 --
192 if (not BuddySyncDB or not BuddySyncDB[BS_VER]) then
193 BuddySyncDB = {};
194 BuddySyncDB[BS_VER] = 1;
195 end
196 --
197 if (not BuddySyncDB[BSR]) then
198 BuddySyncDB[BSR] = {};
199 BuddySyncDB[BSR][FRIEND] = {};
200 BuddySyncDB[BSR][IGNORE] = {};
201 end
202 --
203 for j = 1, numIgnores do
204 local name = GetIgnoreName(j);
205 if (name and name ~= getglobal("UNKNOWN")) then
206 if (not iBSL[name]) then
207 iBSL[name] = {};
208 iBSL[name].inIgnoreList = 1;
209 end
210 if (not BuddySyncDB[BSR][IGNORE][name]) then
211 BuddySyncDB[BSR][IGNORE][name] = {};
212 BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 1;
213 end
214 end
215 end
216 --
217 for i = 1, numFriends do
218 local name = GetFriendInfo(i);
219 if (name and name ~= getglobal("UNKNOWN")) then
220 if (not BSL[name]) then
221 BSL[name] = {};
222 BSL[name].inFriendList = 1;
223 end
224 if (not BuddySyncDB[BSR][FRIEND][name]) then
225 BuddySyncDB[BSR][FRIEND][name] = {};
226 BuddySyncDB[BSR][FRIEND][name].inFriendList = 1;
227 end
228 end
229 end
230 --
231 if (XDA == 0) then
232 XDA = 1;
233 BuddySync:BS_onSYNC();
234 end
235 --
236 end
237 --
238 function BuddySync:BS_CHECK(BSN)
239 --
240 EFE = 0;
241 --
242 if (syncBTN == 0 and BSN == 0) then
243 if (BuddySyncDB[BSR]) then
244 if (BuddySyncDB[BSR][FRIEND]) then
245 if (BuddySyncDB[BSR][FRIEND][namey]) then
246 if (BuddySyncDB[BSR][FRIEND][namey].inFriendList == 1) then
247 DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: |c00bfffff" .. namey .. "|r"..BS_PLAYER_NOT_FOUND_A..BSR..".", 1.0, 0.25, 0.0, 1.0);
248 DEFAULT_CHAT_FRAME:AddMessage("AddBuddy: "..BS_PLAYER_NOT_FOUND_B, 1.0, 0.25, 0.0, 1.0);
249 BuddySyncDB[BSR][FRIEND][namey] = nil;
250 end
251 end
252 end
253 end
254 elseif (syncBTN == 1 and BSN == 0) then
255 if (BuddySyncDB[BSR]) then
256 if (BuddySyncDB[BSR][IGNORE]) then
257 if (BuddySyncDB[BSR][IGNORE][inamey]) then
258 if (BuddySyncDB[BSR][IGNORE][inamey].inIgnoreList == 1 and i2BSL[inamey].Try == 0) then
259 if (BuddySyncDB[BSR].OUTPUT == 1) then
260 DEFAULT_CHAT_FRAME:AddMessage("AddIgnore: |c00bfffff" .. inamey .. "|r"..BS_PLAYER_NOT_FOUND_I..BSR..".", 1.0, 0.25, 0.0, 1.0);
261 end
262 syncCOUNT = 0;
263 i2BSL[inamey].Try = 1;
264 BuddySync:BS_onSYNC();
265 end
266 end
267 end
268 end
269 end
270 --
271 if (BSN == 1 and BuddySyncDB[BSR][FRIEND]) then
272 for i,j in BuddySyncDB[BSR][FRIEND] do
273 if (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then
274 -- nothing
275 elseif (not BSL[i] and BuddySyncDB[BSR][FRIEND][i].inFriendList == 1) then
276 if (i ~= pNAME) then
277 namey = i;
278 BSL[i] = {};
279 BSL[i].inFriendList = 1;
280 AddFriend(i);
281 return namey;
282 end
283 elseif (BSL[i].inFriendList == 1 and BuddySyncDB[BSR][FRIEND][i].inFriendList == 0) then
284 namey = i;
285 BSL[i] = {};
286 BSL[i].inFriendList = 0;
287 RemoveFriend(i);
288 return namey;
289 end
290 end
291 end
292 --
293 end
294 --
295 function BuddySync:BS_onSYNC()
296 --
297 syncCOUNT = syncCOUNT + 1;
298 syncBTN = 1;
299 --
300 if (BuddySyncDB[BSR][IGNORE]) then
301 for ii,jj in BuddySyncDB[BSR][IGNORE] do
302 if (not i2BSL[ii] and ii) then
303 i2BSL[ii] = {};
304 i2BSL[ii].Try = 0;
305 elseif (syncCOUNT == 2 and ii) then
306 i2BSL = {};
307 i2BSL[ii] = {};
308 i2BSL[ii].Try = 0;
309 syncCOUNT = 0;
310 end
311 if (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then
312 XDA = 0;
313 syncCOUNT = 0;
314 inamey = ii;
315 iBSL[ii] = {};
316 iBSL[ii].inIgnoreList = 3;
317 BuddySync:BS_FRIENDS();
318 return inamey;
319 elseif (not iBSL[ii] and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 1) then
320 if (i2BSL[ii].Try == 0) then
321 inamey = ii;
322 AddIgnore(ii);
323 return inamey;
324 end
325 elseif (iBSL[ii].inIgnoreList == 1 and BuddySyncDB[BSR][IGNORE][ii].inIgnoreList == 0) then
326 inamey = ii;
327 iBSL[ii] = {};
328 iBSL[ii].inIgnoreList = 0;
329 DelIgnore(ii);
330 return inamey;
331 end
332 end
333 end
334 --
335 end
336 --
337 function BuddySync:BS_SET_SHOW()
338 --
339 if (XDA == 1) then
340 syncBTN = 0;
341 BuddySync:BS_CHECK(1);
342 end
343 --
344 return self.hooks[FriendsFrame]["OnShow"].orig()
345 --
346 end
347 --
348 function BuddySync:BS_ADD_FRIEND()
349 --
350 BSA = 1;
351 --
352 return self.hooks[FriendsFrameAddFriendButton]["OnClick"].orig()
353 --
354 end
355 --
356 function BuddySync:BS_DELETE_FRIEND()
357 --
358 BSA = 0;
359 --
360 local BSS = GetSelectedFriend();
361 local name = GetFriendInfo(BSS);
362 --
363 BSL[name].inFriendList = 0;
364 BuddySyncDB[BSR][FRIEND][name].inFriendList = 0;
365 --
366 return self.hooks[FriendsFrameRemoveFriendButton]["OnClick"].orig()
367 --
368 end
369 --
370 function BuddySync:BS_ADD_IGNORE()
371 --
372 BSA = 1;
373 --
374 return self.hooks[FriendsFrameIgnorePlayerButton]["OnClick"].orig()
375 --
376 end
377 --
378 function BuddySync:BS_STOP_IGNORE()
379 --
380 BSA = 0;
381 --
382 local BSS = GetSelectedIgnore();
383 local name = GetIgnoreName(BSS);
384 --
385 iBSL[name].inIgnoreList = 0;
386 BuddySyncDB[BSR][IGNORE][name].inIgnoreList = 0;
387 --
388 return self.hooks[FriendsFrameStopIgnoreButton]["OnClick"].orig()
389 --
390 end
391 -- --
392 function BSSPLIT(text, separator, t, noPurge)
393 --
394 local value;
395 local mstart, mend = 1;
396 local oldn, numMatches = 0, 0;
397 local regexKey = "([^"..separator.."]+)";
398 local sfind = strfind;
399 --
400 if ( not t ) then
401 t = {};
402 else
403 oldn = table.getn(t);
404 end
405 --
406 mstart, mend, value = sfind(text, regexKey, mstart);
407 --
408 while (value) do
409 numMatches = numMatches + 1;
410 t[numMatches] = value
411 mstart = mend + 1;
412 mstart, mend, value = sfind(text, regexKey, mstart);
413 end
414 --
415 if ( not noPurge ) then
416 for i = numMatches+1, oldn do
417 t[i] = nil;
418 end
419 end
420 --
421 table.setn(t, numMatches);
422 return t;
423 end