Fixes Doom Eternal (modded version) being unable to download mods.
I am aware of MR https://gitlab.winehq.org/wine/wine/-/merge_requests/4817 from 6 months ago. I don't know why exactly it wasn't merge but for me it looks wrong to implement the newer and more feature rich IFileOperations interface on top of old SHFileOperationW(). In particular, sink notifications are not possible to implement this way, there might be much more functional changes revealing when adding tests. So I decided to implement that in an entirely different way, also adding some tests and implementation for notification sink at once. Besides that being used in the mentioned game, it also makes it easier to test how the operations are actually performed and make sure that behaviour does not diverge from Windows too much.
Making some common helpers shared between old and new engines also seems to be adding more complexity than saving an effort. There is
There are also (currently unimplemented in Wine) ITransferSource / ITransferDestination interfaces which are sort of related and apparently using the same "copy engine". I looked at those a tiny bit and I didn't see how implementing those first would help here, e. g., they have different notification system (the one from here is not implementable on top of that). So I concluded that implementing those first and using something from that in IFileOperations is not beneficial, rather those can be implemented on top of IFileOperations or both can use shared internal "copy engine" helpers.