now I get it, I mixed the dataset "mode" and the dataset "list".

So while I won't block on this, here is how I would have done the delete case:

* find all selected new message drafts and delete them (part of your current algorithm, except you know they are new message drafts only
* for all threads
** delete associated drafts (very easy with the API you already have)
** delete messages (current code)

Advantages:
* we use only the "mode" dataset (and we get rid of the "list" dataset)
* it's a more linear algorithm