Replacement for KMimeType::isBinaryData?
Milian Wolff
mail at milianw.de
Mon Jan 5 11:39:36 UTC 2015
On Sunday 04 January 2015 12:12:24 David Faure wrote:
> On Wednesday 29 October 2014 00:30:04 Kevin Funk wrote:
> > Heya,
> >
> > I didn't find a suitable replacement for KMimeType::isBinaryData in KF5.
> > Is
> > there some?
> >
> > http://lxr.kde.org/ident?v=kf5-qt5&_i=isBinaryData&_remember=1 shows
> > exactly two users of this function.
> >
> > Worth considering upstreaming to Qt?
>
> Well, you tell me :)
> Upstreaming requires providing use cases for it, so tell me what your use
> case is.
>
> Looking at the implementation of the function, I fear that it is hard to
> prove that it's correct and useful.
>
> It only checks the first 32 bytes of the file, so it's not like this could
> become a QByteArray method as I first thought when you talked about
> upstreaming it (e.g. QByteArray::isText(), isPrintable() or isBinaryData())
>
> It would have to stay file-specific, i.e. in QMimeType.
>
> Then, there are non-printable characters outside of the 0-31 range, so this
> method is rather "isBinaryData -> true means it is, false means we don't
> know, maybe it is". That makes me uneasy about the usefulness of the
> method. It is there because XDG shared-mime-info specifies this is what we
> should fallback to, in the absence of a known extension or a known file
> content, to choose between a fallback to text/plain and a fallback to
> application/octet- stream, but it's really an imperfect heuristic. I'm not
> sure we want more code depending on that imperfect heuristic, by making it
> public API again.
>
> Which goes back to -- what's your use case for it :-)
In KDevelop, we support file/project templates. These are archives of files
that may contain placeholders that will get replaced with user input when a
file/project is created from a template. This replacement can only work on
non-binary data, which is what the code checked in KDE4 times. In slightly
abbreviated code:
AppWizardPlugin::copyFileAndExpandMacros(sourceFile, destFile)
{
if (isBinaryData(source)) {
KIO::copy(source, dest);
} else {
destFile << expandMacros(sourceFile);
}
}
You have more knowledge about mimetypes than us. Can we maybe just check
whether the mimetype of sourceFile inherits text/plain?
Bye
--
Milian Wolff
mail at milianw.de
http://milianw.de
More information about the Kde-frameworks-devel
mailing list