I don't totally understand what you did, but it seems to work.
This function is called at a rate which is set according to the smallest check interval of the concerned accounts.
If some of the accounts to be checked have a larger interval, they are skipped.
For these accounts, this implies that the actual intervals may not exactly respect the requested intervals, as they will be multiples of the smallest interval.
Just to be sure: let's guess my check intervals are:
- Account 1: 5sec
- Account 2: 7sec
- Account 3: 9sec
- Account 4: 11sec
This means there will be a "cycle" every 5sec and in cycle x these accounts will be checked:
- Cycle 1: Account 1
- Cycle 2: Account 1, 2, 3
- Cycle 3: Account 1, 2, 4
- Cycle 4: Account 1, 3
- Cycle 5: Account 1, 2, 4
This way the longest gap between the original check interval and the actual check interval would be the time of the cycle -1 sec. Which should be OK.
I think it's not gonna be the biggest problem if the check interval is not exactly what it was set to (as long as users know). I guess this is a good compromise, especially since it would be hard to check each account by it's original interval and just use the synchronous way if two (or more) accounts conflict - because it's not easy to say when accounts will conflict (they might even if the are not checked at exactly the same).
Anyway, here is a beta versionI would like you to test before I release it. Hope it will work for you. If it doesn't, I think I just have to
OK, I have to omit my testing was kind of hardcore - but this is what testing is all about, isn't it?
So here is how I managed to get the error again:
- Check interval for two accounts both at 10sec
- sending a mail to one of these accounts with a 7 Mb attachment
- using a 2000 kbit/ sec downstream line the download time couldn't get better than 28 sec
- this way I got the error twice
But I think this is not too bad. I'm not sure if thunderbird itself tackles this problem - but I might not happen too often because it's just possible to set up the interval in minutes.
This just means the user has to set a check interval working with the speed of the internet connect he is using - so it's up to the user to decide if he wants to get the error message...
I'm not sure if it's possible to skip a cycle if the another download is still running or if it's possible to check if the folder is still being processed. But as I said this would just be a bonus to make it perfect.
THANK YOU SOOOO MUCH FOR TACKLING THE PROBLEM!!!
GLOBS, YOU ROCK!!!