On Monday 02 November 2015 14:53:40 Luiz Romário Santana Rios wrote: > > I'm trying to decompress a XZ archive downloaded using > QNetworkAccessManager, so, according to the documents, I have to pass > the QNetworkReply pointer to a KCompressionDevice
I don't think this can work at all. (and yes I've seen your review request, but while it fixes the file:/// case, are you sure it fixes the network case as well?) Here's the issue: while QIODevice is indeed one single API, there are two ways to use it: push and pull. Or in other words, async and sync. The push / async use case is the one used with sockets (including QNetworkReply). You wait for data to be available and only then read it. Waiting can be done blocking or with the event loop (signal/slot connection). The pull / sync use case is code that assumes there's always data available, as is the case with QFile, QBuffer etc. This is what KCompressionDevice, KTar, KZip etc. all assume. So the reason it breaks (apart from the issue of seeking) is that when KTar (or KCompressionDevice) wants to read more data, it might not be available, and the read fails. You could add waitFor* calls, but that would make the whole thing blocking - very bad for the main thread of a GUI program. So instead I do recommend using KIO (or QNAM) to make an async download (keeping the GUI reactive, allowing for a progress bar if desired...), and only once the stuff is in a tempfile, you can create a KArchive on top. KTar is somewhat linear so your patch + waitFor* might make it work but KZip requires a lot more going back and forth in the file, so this will never work without a temp file. In the special case of tar+compression in readonly mode, KTar already creates a temp file, for the uncompressed tar, for faster seeking. This might also be why you make it work in this very case, but that doesn't help for the other cases (not tar, or not compressed) -- David Faure, fa...@kde.org, http://www.davidfaure.fr Working on KDE Frameworks 5 _______________________________________________ Kde-frameworks-devel mailing list Kde-frameworks-devel@kde.org https://mail.kde.org/mailman/listinfo/kde-frameworks-devel