Should CMD_MIMETYPE methods emit mimeType()?
David Faure
faure at kde.org
Sat Sep 20 00:58:41 BST 2008
On Sunday 27 July 2008, Vlad wrote:
Wow, time flies...
> Am I correct to assume that the KIO slave methods called as a result of CMD_MIMETYPE (ie. sftpProtocol::mimetype(), Ftp::mimetype(), etc) should do an "emit mimeType()"?
Yes. The docs for mimeType() say so.
("emit" isn't fully correct, it's not a signal, but doesn't matter, I see what you mean conceptually ;)
It's the whole point of that method.
Note, however, that mimetype() doesn't _have_ to be implemented by the slave;
if not implemented, a get will be issued, as it says in the apidox. This is what happens
for kio_file for instance. Hmm. We should probably implement it to avoid sending the whole data.
> Right now, sftpProtocol::mimetype() and Ftp::mimetype() don't do that, so I suspect they are broken.
They are broken indeed, if they implement that method without calling mimeType in it.
> In fact, Ftp::mimetype() for sure doesn't work because it is #if 0'ed.
That's no problem, the default implementation is used instead.
> It seems that sftpProtocol::mimetype() and Ftp::mimetype() call data() instead of "emit mimeType()"
> and an 8-year-old comment in Ftp::mimetype() mentions KMimeMagic. Is calling data() and relying on KMimeMagic outdated?
Yes, I don't see code doing this in the job. I think this comment makes no sense anymore.
> PS: The File KIO slave doesn't even have a FileProtocol::mimetype(), and nobody seems to miss it.
Correct. See above and the default implementation in SlaveBase.
> Perhaps CMD_MIMETYPE isn't used at all
It is used by the KIO::mimetype() job. Indeed, this isn't widely used (it's not used by KRun anymore,
for which it was initially written), but it is used by code that wants to do a HTTP HEAD
http://lxr.kde.org/search?filestring=&string=%22KIO%3A%3Amimetype%22
mentions
playground/libs/webkitkde/kdenetwork/knetworkaccessmanager.cpp (for http head)
kdenetwork/kopete/protocols/yahoo/libkyahoo/receivefiletask.cpp (for http head)
playground/base/nepomuk-kde/linkwidget/linkwidget.cpp (seems to be the only real use of "I want the mimetype")
Ah. It's also used via NetAccess.
http://lxr.kde.org/search?filestring=&string=%22NetAccess%3A%3Amimetype%22
OK, that's a valid number of use cases, it's not completely useless ;)
Overall, I don't think it's a big problem if the mimetype method isn't implemented in the slaves.
--
David Faure, faure at kde.org, sponsored by Trolltech to work on KDE,
Konqueror (http://www.konqueror.org), and KOffice (http://www.koffice.org).
More information about the kde-core-devel
mailing list