KSANECore in KDE review

Alexander Stippich a.stippich at gmx.net
Sat Apr 2 10:25:34 BST 2022


On Sunday, 27 March 2022 21:28:38 CEST Harald Sitter wrote:
> On Sun, Mar 27, 2022 at 6:29 PM Alexander Stippich <a.stippich at gmx.net> 
wrote:
> > Hello everyone,
> > 
> > KSANECore is now in KDE review. Kåre and I mentioned it in previous emails
> > before, but as a short summary:
> > KSANECore is a Qt interface to the SANE scanner library. It is stripped 
out of
> > the KSaneWidget of libksane without any QWidget dependency. It is 
currently
> > located inside the libksane repository as KSaneCore and basically just 
copied
> > into the new repository.
> > 
> > Due to breaking API anyway, the code was cleaned up, better named as well 
as
> > smaller API fixes made on top. Also, KSANECore is fully REUSE compliant.
> > KSaneWidget of libksane will remain ABI compatible.
> > 
> > I don't know if it is strictly required to move the new repo with already
> > existing code through KDE review, but I guessed it is better to be on the 
safe
> > side :)
> > 
> > The plan is to switch libksane and Skanpage over to the new library during 
the
> > KDE Gear 22.08 release cycle. The adaptions are located at
> > https://invent.kde.org/astippich/skanpage/-/commits/ksanecore
> > and
> > https://invent.kde.org/astippich/libksane/-/commits/ksanecoreSplit
> 
> amazing!
> 
> for everyone's convenience here's the url to the lib ;)
> https://invent.kde.org/libraries/ksanecore

Thanks! Could have thought about this myself...

> some comments from scrolling through the code:
> 
> you may want to reconsider how stringEnumTranslation works
> https://github.com/KDE/clazy/blob/master/docs/checks/README-non-pod-global-static.md
> either use q_global_static, or - IMHO neater - move it into the
> function loadDeviceOptions as function local static since we don't
> need it outside that function anyway.
> 
> CoreInterface, CoreInterfacePrivate, InternalOption, ScanThread and
> CoreOption should have their constructors marked explicit
> 
> the typedefs in coreoption.h are super old school maybe modernize them? ;)
> 
> some of the API documentation still refers to libksane, should that be 
changed?

All done.

> on a similar note, you still use the KSane namespace and include
> guards. It may make sense to rename them KSaneCore and KSANECORE
> respectively? for consistency if nothing else

KSane was chosen deliberately here. The plan is to have a KSane::Core... and 
the KSane::Widget in the future. libksane would become KSaneWidget later 
during the Qt 6 transition, to keep ABI compatibility for now.

> if you havent considered this: you might want to use the clang-format
> rules from ECM to join the common formatting we have (and apply that
> via commit hooks)

Not done yet, but I will look into it.

> I would argue that reloadDevicesList and getOption(const OptionName
> optionEnum); should have their const dropped. the const there doesn't
> impact the signature and as such is confusing from an API POV
> 
> on a matter of less code noise I would use std::make_unique when
> creating new unique ptrs instead of manually passing a raw pointer to
> the ctor.
> 
> in CoreInterfacePrivate m_batchMode + Delay are uninitialized in the
> ctor. please initialize them nullptr
> 
> since you have Qt6 ifdefs you may want to enable qt6 CI as well
> 
> the shebang line in your Messages.sh appears to have lost its position
> and is no longer at the top of the file

All fixed.

> you appear to have an autotests dir and cmakelists but no actual tests? :O

That is reserved for the future when I find the time to actually write the 
tests :)

Thanks for the review!

Best regards,
Alex





More information about the kde-core-devel mailing list