I've had users asking for this functionality, and happened upon Arantor's hack, and this thread. I know I'm about a year late to this. But some thoughts crossed my mind reading over this thread.
I don't think this is as inelegant as some think. Sure, it's a retrofit, but it does the job with little fuss. How many forums are going to have 2bill+ posts? And besides, if that number is actually hit, you have other problems to contend with anyway, no? Then, it seems to me that it'd be really easy to list these ignored topics by simply querying for 2147483646 in the log_topics table under the member id.
But I digress....
Please feel free to provide us with your ideas so that the best possible way is implemented.
Now bear with me on this, as I haven't looked at ALL the code. This is just conceptual (and may even have been mentioned already elsewhere and I haven't seen it)...
I read someone say that this hack assumes equivalence between ignored and unread, and described an example issue. Alright then. How about
slightly different approach. What about adding a column to log_topics? A flag to ignore? Default is off (or that could be a profile option). Then if someone clicks ignore, that flag is set. Then adjust the various queries involved to either account for or dismiss that flag as required by the given task? This leaves the last unread post intact, but provides for an option to ignore depending on what is being queried for.
From the user's point of view, this is effectively "Unsubscribe".
Someone more familiar with the code can address this idea or shoot it down. It'd take me some time to get up to speed on it and turn concept into practice
(which I will do, but I won't be up on it any time soon).
-T.