check if enough disk space available before even starting to copy each file
Review Request #103412 - Created Dec. 14, 2011 and submitted
this is simple fix for 243160. It gets free space info for the dst partition, then after each successful file copy it decreases an internally kept m_freeSpace value. this will help us avoid situations when user copies a 4gb long file onto his disk, then finds out it has not enough space available. i hope that i correctly understood kio copy job mechanism and done error reporting right. TODO (from what was asked in the bug): *checking for single file size limit on vfat. *if the total size is larger than free space, warn user beforehand immediately (right now it does the copying until it finds that the next file cannot be copied completely) both these require new dialogs with user visible strings and are subject to be added after 4.8. also as a bonus i changed m_overwriteList to be qset instead of qlist to make lookup operations faster.
files get copied fine. if i copy a bunch of files including one big file (created with dd if=/dev/zero of=file.out bs=1MB count=300), then the copying process stops when it gets to this big file (i have small disk on my virtual machine, only 400 mb free)
|Please use KFileSystemType instead of KMountPoint, it will be much faster. And yeah, given that copying to NFS will be ...||David Faure|
this whole file needs a reformat into kdelibs style, though that's out of scope for this patch .. comments inline below.
note that KDiskFreeSpaceInfo can block for significant periods of time in certain cases; we've found this to be the case where the mount point being queried was a network drive that is no longer available (temporarily or permanently; disruption of network access triggers this case nicely). this can result in delays on the order of 15-30s on many systems. as such, in plasma we've moved usage of KDiskFreeSpaceInfo into a separate thread on its own. i'm not sure if this would end up a concern here (perhaps one can only copy to locations that are accessible?), but something to note.
of course, this won't help much in the case where there is more than one copy job happening (in or out of KIO). though i suppose it will end up catching more cases than are caught now (e.g. none)