WhoLib Compatibility
WhoLib Compatibility
I'm creating this topic to discuss getting census+ to work with wholib.
Essentially, any addon that wants to run background /whos will work fine on its own - as long as its the only such addon a user is running. When there are more than one - the addons often interact very badly and in difficult to fix ways.
Example: Consider that you have 3 addons that each run a who request at the exact same time. The server sends back one response. Which /who was it to?
WhoLib is supposed to make life easy for addon developers, and it actually does - if you support it in your addon.
If you don't support wholib, well then wholib is just like any other addon which want to run who requests in the background - you will have conflicts.
There are 2 main strategies:
1) Use wholib as part of your addon
2) Use wholib if it is there and your original code if not.
I have modded the current census+ to support wholib if it is there, and work normally if not. I haven't done much testing, I'm hoping that folks will pitch in and help. I posted here almost a year ago about this - but we were all busy getting ready for 3.0 i guess, and noone followed up.
Here's a link to the modded version:
http://www.wowace.com/addons/census-wholib-version/
and the ticket on wowace.com
http://www.wowace.com/addons/wholib/tic ... us-compat/
Sylvanaar
Essentially, any addon that wants to run background /whos will work fine on its own - as long as its the only such addon a user is running. When there are more than one - the addons often interact very badly and in difficult to fix ways.
Example: Consider that you have 3 addons that each run a who request at the exact same time. The server sends back one response. Which /who was it to?
WhoLib is supposed to make life easy for addon developers, and it actually does - if you support it in your addon.
If you don't support wholib, well then wholib is just like any other addon which want to run who requests in the background - you will have conflicts.
There are 2 main strategies:
1) Use wholib as part of your addon
2) Use wholib if it is there and your original code if not.
I have modded the current census+ to support wholib if it is there, and work normally if not. I haven't done much testing, I'm hoping that folks will pitch in and help. I posted here almost a year ago about this - but we were all busy getting ready for 3.0 i guess, and noone followed up.
Here's a link to the modded version:
http://www.wowace.com/addons/census-wholib-version/
and the ticket on wowace.com
http://www.wowace.com/addons/wholib/tic ... us-compat/
Sylvanaar
Last edited by akhtar on Thu Oct 22, 2009 2:07 pm, edited 2 times in total.
No prob - its been on my todo list for almost a year since I first posted over here about it.
The updated wholib combined with the modified census+ i linked have been running really well.
You should consider hosting the census+ source over on wowace.com or curseforge.com. If you have an account over there let me know - i'll add you onto the wholib project.
The updated wholib combined with the modified census+ i linked have been running really well.
You should consider hosting the census+ source over on wowace.com or curseforge.com. If you have an account over there let me know - i'll add you onto the wholib project.
Jon S Akhtar
It does currently throw an error if LibWho is NOT present, working on a fix atm.
Code: Select all
Message: ..\AddOns\CensusPlus\CensusPlus.lua line 1346:
Cannot find a library instance of "LibWho-2.0".
phpbb:phpinfo()
Changing
to
Seems to do the trick. Do you see any problems with doing it this way?
Code: Select all
wholib = wholib or LibStub("LibWho-2.0");
Code: Select all
wholib = wholib or LibStub:GetLibrary("LibWho-2.0", true);
Seems to do the trick. Do you see any problems with doing it this way?
phpbb:phpinfo()
Will this version also prevent the popping up from the who window every second, when census is active.
It is pretty worse atm, probly cause of another addon that was updated lately.
Before, it stopped popping up by clicking the friendstab and close the social window.
That doesn't work anymore. Actually nothing works.
Well one thing does. Dragging the social window almost out of your screen so its not in the way anymore
So if this version can change this annoying behavior I will we very glad, and a lot of others with me I think.
It is pretty worse atm, probly cause of another addon that was updated lately.
Before, it stopped popping up by clicking the friendstab and close the social window.
That doesn't work anymore. Actually nothing works.
Well one thing does. Dragging the social window almost out of your screen so its not in the way anymore

So if this version can change this annoying behavior I will we very glad, and a lot of others with me I think.

I cleaned up the issue page at wowace.com, and rezipped the last version I had worked on. The link is updated in the OP, and here : http://static.wowace.com/content/attach ... ib-003.zip
Jon S Akhtar
It looks like the section of code beginning on line 2020 of CensusPlus.lua is responsible for re-queuing a /who request:
If the WhoLib covers this, I would imagine it would be safe to remove this section entirely. I'm at work right now and can't test it, but I'll do so when I get home and see if this fixes the duplicates. Otherwise, I've been using the WhoLib version akhtar worked up for some time now without any other issue.
Code: Select all
--
-- Resend /who command
--
g_WhoAttempts = g_WhoAttempts + 1;
local whoText = CensusPlus_CreateWhoText(g_CurrentJob);
if( CensusPlus_PerCharInfo["Verbose"] == true ) then
CensusPlus_Msg(CENSUSPlus_WAITING);
end
if( g_WhoAttempts < 2 ) then
CensusPlus_SendWho(whoText);
else
g_WaitingForWhoUpdate = false;
end
If the goal is to produce a version of CP that optionally uses WhoLib, only if it is present, then removing the section of code wouldn't be the way to go. Instead, if you are right and WhoLib negates the need to resend, then the block should be enclosed in an if() to only execute when WhoLib isn't being used. Without looking more closely at the code, it's possible that some of that may still need to execute (or alternate code might be needed if WhoLib never comes back for a query).
Yes, very true. And after playing around with it, with wholib enabled, that section of code still needsKosh wrote:If the goal is to produce a version of CP that optionally uses WhoLib, only if it is present, then removing the section of code wouldn't be the way to go. Instead, if you are right and WhoLib negates the need to resend, then the block should be enclosed in an if() to only execute when WhoLib isn't being used. Without looking more closely at the code, it's possible that some of that may still need to execute (or alternate code might be needed if WhoLib never comes back for a query).
Code: Select all
g_WaitingForWhoUpdate = false;
With the above code replacing the original code, there were no duplicates.
I have created a project on wowace.com to store the source changes I have made, in case anyone wants to submit patches etc.
http://www.wowace.com/addons/census-wholib-version/
http://www.wowace.com/addons/census-wholib-version/
Jon S Akhtar