completely rejigger the way resuming works on smb
the resuming logic is super duplicating and was also somewhat divergent between the duplicates.
to resolve this there's now a new unified couple of helpers that specifically deal with establishing context on a file transfer. this actually maybe should eventually move to KIO proper. it seems to me that every implementation needs to do more or less the same thing except for the IO specifics
- shouldResume is called relatively early on and establishes the context. the context is entirely dependent on the resume configuration at hand. if KIO::Resume is set we resume in-place, otherwise we may have an intermediate .part file. if neither is applicable then we straight up need to overwrite. this effectively hides the details of the intermediate url switch. the actual transfer logic in smb_dir gets a context back with the destination configured to where it should write to (not necessarily where the file will end up at in the end)
- concludeResumeHasError is called once the transfer is complete and concludes a potential resume by moving the .part file in place, or discarding it if the transfer aborted
to facilitate this there are some very lightweight IO abstraction classes in play now, encapsulating the IO concerns of the two functions so we can use them for both remote destinations or local destinations (we do need to do some stating and moving when dealing with part files specifically)
this now also gives us a much more isolated way of testing the resume logic specifically so I've also added a new unit test accordingly
this should also allow us to correctly implement resuming in smbCopy (currently ignores resume - which is inconsistent with how this would work if we didn't implement smb->smb and let KIO orchestrate two instances of smb.so to implement the transfer), and ::put which suffers much the same problem