Making KFileMetaData a framework
Vishesh Handa
me at vhanda.in
Wed Aug 6 14:05:27 UTC 2014
On Tuesday, August 05, 2014 11:19:16 PM Kevin Ottens wrote:
> Hello,
>
> On Tuesday 05 August 2014 18:36:24 Vishesh Handa wrote:
> > I would appreciate it if everyone could review the code once before it
> > gets
> > into frameworks.
>
> metainfo.yaml should have "release: false" until it's part of a KF release.
> Also it should be integration and not functional (relies on plugins).
Fixed
>
> The "test" folder should be named "tests" (see directory structure policy).
>
Fixed
> Public headers should use <> style include. Also it seems you're not
> following the k convention but the namespace convention for your classes,
> then the includes in public headers should be namespaced as well (e.g.
> <kfilemetadata/foo.h>).
>
> I'm not sure why ExtractorPluginManager is exported. A function in a
> namespace would be enough, there's no point in instantiating a manager by
> hand from the client code perspective, at best looks like leaking an
> implementation detail.
We could just expose a function which loads all the Extractors, but then the
client side would need to iterate over all of them and figure out which ones
match the mimetype they are targeting. I was hoping to avoid that.
Currently, ExtractorPluginManager just provides a fetchExtractors(mimetype)
function. This cannot just be made a function as one doesn't want to load all
the plugins each time. Hmm, or maybe we just save all the plugins in a static
variable.
>
> Similarly the ExtractorPlugin naming is odd in the public API as it states
> it is necessarily a plugin (implementation detail). I'd rename it
> ExtractorInterface, I'd drop the suffix altogether or I'd keep
> ExtractorPlugin for plugin implementors while they'd be wrapped in
> Extractor instances on the client code side (I think that's actually my
> favorite solution).
Just to clarify -
* ExtractorPlugin - All plugins would derive from this. We could also call it
ExtractorInterface (I do like this name better).
* We have an Extractor class which is just a wrapper on top of the
ExtractorInterface which does ... ?
>
> AFAICT there's no reason for ExtractorPlugin to inherit from QObject at that
> point. Same thing for ExtractorPluginManager.
Fixed ExtractorPluginManager
ExtractorPlugin - This now requires every plugin to derive from both
ExtractorPlugin and QObject. This might be less friendly.
>
> Creating by hand the ExtractionResult, then passing it by pointer to the
> extract method looks odd. I'd expect calling extract() with a bunch of
> parameters and getting a result back (another reason for wrapping plugins on
> the client side).
The idea was that every client should implement their own ExtractionResult. By
default it is a pure virtual class. Cause you really don't want to be storing
all the text in memory.
>
> The whole API is synchronous which we probably don't want. It'd be better to
> have an async API (much better to build up sync on top of async than the
> contrary).
Hmm, how would we do async? I thought people could just run it in another
thread / process if they want. The only thing I can think of changing is that
the plugins return the result later via a signal instead of doing all the work
in one function.
>
> What about the thread safety? At a glance I would say ExtractorPluginManager
> is not
>
> That's about it after a quick glance while tired. Keep us posted for a
> second round.
Thanks for the review!
>
> Regards.
--
Vishesh Handa
More information about the Kde-frameworks-devel
mailing list