2401ea5864
The privacy filter only catches new messages. Two new MessageStore methods support a one-shot retroactive sweep: GetMessageCountsByChatType returns a (ChatType, count) snapshot so the UI can preview the impact, and CleanupRetainOnly hard-deletes everything outside the supplied allowlist and runs VACUUM to reclaim disk space. The Privacy tab gains a new section with a refresh-preview button, a keep/delete summary, a per-channel breakdown tree, and a Ctrl+Shift confirm. The cleanup runs on a background thread so a 800+ MB VACUUM does not block the settings UI; tabs are rebuilt via the framework thread once the delete finishes. The cleanup deliberately uses the saved Plugin.Config whitelist (not unsaved Mutable edits) so it stays consistent with the prospective filter.