On 07/30/13 13:23, Boudewijn Rempt wrote:
On Tue, 30 Jul 2013, Jos van den Oever wrote:

The KIODevice : public QIODevice would have to have an async
implementation like QTcpSocket and QProcess. No rocket science, but
something to keep in mind. waitForReadyRead() and
waitForBytesWritten() would be needed to block until KIO::FileJob
gives back data.

For calligra, I think that sychronous would be quite okay -- and I think
that even just using local files would be quite okay. In fact, I am sure
that there quite a few places where non-local KIO file handling was broken.

The point was the most of KIO is not synchronous, so a wrapper necessarily is not either.



Perhaps KF already has an adaptor that returns a QIODevice from a
KIO::FileJob.

Do we need more KIO than simply
 FileJob *KIO::open(const KUrl &url, QIODevice::OpenMode mode)
?


Well, we use KIO in 218 places in 93 files --

KIO::NetAccess::del
KIO::move
KIO::NetAccess::synchronousRun
KIO::move
KIO::storedHttpPost
KIO::copy
KIO::NetAccess::download
KIO::NetAccess::exists
KIO::NetAccess::stat
KIO::NetAccess::removeTempFile
KIO::NetAccess::upload
KIO::file_copy
KIO::filePreview
KIO::PreviewJob::availablePlugins()
KIO::storedGet
KIO::moveAs

Seems to be the sum of the KIO api we use -- plus what's hidden inside
KFileDialog and so on.

And KIO::open is not in that list. Amazing :-)
Calligra uses storedGet instead. Actually a combination of NetAccess::download and QFile is probably the best way to open files in Calligra. The fallback to just QFile is then easy.

$ egrep 'KIO::(:|\w)+\(' -rohI .|sort|uniq -c

      1 KIO::convertSize(
      1 KIO::copy(
      4 KIO::del(
      3 KIO::file_copy(
      4 KIO::filePreview(
      1 KIO::get(
      1 KIO::JobUiDelegate::askFileRename(
      7 KIO::move(
      1 KIO::moveAs(
      7 KIO::NetAccess::del(
      2 KIO::NetAccess::dircopy(
     15 KIO::NetAccess::download(
     28 KIO::NetAccess::exists(
      1 KIO::NetAccess::lastErrorString(
     16 KIO::NetAccess::removeTempFile(
      2 KIO::NetAccess::stat(
      7 KIO::NetAccess::synchronousRun(
      6 KIO::NetAccess::upload(
      1 KIO::pixmapForUrl(
      2 KIO::PreviewJob::availablePlugins(
      8 KIO::storedGet(
      3 KIO::storedHttpPost(
      1 KIO::storedPut(

The most complex calls in here are the ones getting a pixmap, but that can be implemented by getting the embedded thumbnail or returning the mimetype icon.

I'm in favor of wrapping all and switching between KIO or Qt with compile switch or putting KIO functionality in a loadable module. The latter would allow people to install Calligra and install optional Plasma Desktop integration.

Cheers,
Jos

_______________________________________________
calligra-devel mailing list
calligra-devel@kde.org
https://mail.kde.org/mailman/listinfo/calligra-devel

Reply via email to