Questions on the new KIO::FileJob API
Allan Sandfeld Jensen
kde at carewolf.com
Wed May 14 20:02:27 BST 2008
On Wednesday 07 May 2008, Vlad wrote:
> --- nf2 <nf2 at scheinwelt.at> wrote:
> > 1) - Creating Files: Apparently FileJob in kio_file doesn't allow
> > creating files.
> I think this bug is fixed by adding O_CREAT whenever the user requests
> QIODevice::WriteOnly. If the file already exists, O_CREAT does
> nothing, so it shouldn't hurt. I hope to commit this fix soon:
Sounds like a good idea.
> > 2) - Reading Files: From reading the code in kio_file i'm not sure
> > whether data() is supposed to emit all the requested data in a
> > single
> > callback
> Yes, one data() should emit all the requested data, unless the slave
> reaches EOF, in which case it returns all the data up to the EOF.
No. A read can result in any number data() emits. For files it will usually be
only one, but for streams it can be multiple.
> > as the client might try to call
> > seek()
> > before read() is finished.
> Once you call FileJob::read(), you're supposed to _wait_ until the
> data() slot from that read() request has been served before making
> another request to the FileJob (ie. calling another FileJob::seek(),
> FileJob::write(), etc).
No. The calls to FileJob queues, so there is no reason to wait, but remember
seek will _not_ cancel already issued reads. It will wait for previous
actions to complete then perform the seek. If you use the API for streaming
it is recommended you issue a stream of read(blocksize) to fill a local
buffer, and when seeking clearing the local buffer. You receive a position()
signal to signify a succesfull seek.
More information about the kde-core-devel