KMime API review
Volker Krause
vkrause at kde.org
Mon Sep 29 17:57:40 BST 2025
Thanks Albert!
Sorry for the late reply, I have been trying to fix some of this in the
meantime though :)
On Montag, 15. September 2025 22:15:26 Mitteleuropäische Sommerzeit Albert
Astals Cid wrote:
> As requested during Akademy.
>
>
> Function has boolean trap:
> * Content::clearContents
Fixed (argument removed)
> * Content::encodedContent
> * All the functions with "bool create"
> * All the functions with "bool useCrLf"
> * All the functions with "bool isCRLF"
> * All the functions with "bool withHeaderType"
Whatever is left of the CRLF and create arguments can probably be replaced by
enums. I'd like to try to get rid of the withHeaderType argument entirely.
> Function is undocumented
> * Content::replaceContent
Fixed (function removed).
> Should the input parameter be a std::unique_ptr to clearly indicate the
> function is taking care of ownership?
> * Content::setHeader
> * Content::appendHeader
> * Content::prependContent
> * Content::appendContent
> * Content::replaceContent
This is rather invasive but should be low-risk I think, ie. the compiler can
catch every old use for us. So this mainly needs a decision on whether or not
to do it.
> Should the return value be a std::unique_ptr to clearly indicate the user
> needs to take care of deleting it?
> * Content::takeContent
This OTOH is high-risk as it'll introduce a significant behavior change without
the compiler noticing. There's very few uses of this, so still doable if we
want it I think.
> AddrSpec has no documentation and the name could be longer/more descriptive?
Documentation has been added.
"addr-spec" is the RFC 20247 naming of this. The obvious expanded form
"address specification" however refers to something else in RFC 2047, so I'd
not use that instead.
> Does the class/struct need a d-pointer?
> * AddrSpec
> * Mailbox
> * Address
These are very high-volume instances (e.g. used in KMail's message list), so
an extra allocation for each of them would hurt. Adding an additional (unused
for now) d-pointer member would also cost some memory but that would probably
be acceptable given this is mostly dominated by the memory cost of the string
content.
> Base::type returining a const char * seems old fashioned?
This should be something that is allocation-free to create from constants/
literals and very cheap to pass around, so any view type should work.
Returning views is a bit unusual as well though.
> content.h has two KDE5: BIC maybe moving to KF would be the chance to do it?
Found a third one, two are fixed. For the third one I'm still reviewing the
implications (changing a default bool argument).
> Make the input parameter const & instead of const * since we don't check if
> the pointer is null?
> * Ident::fromIdent
Fixed.
> Split ContentType::setPartialParams into two functions? It takes two int,
> the order is not clear, and as far as i can see there's no really a benefit
> in just having 1 function
Fixed.
> Seems like the parseXXX functions that return a bool and return the result
> as input parameter by reference nowadays would return a std::optional?
The advantage of the current approach is that it allows reusing already
allocated memory for the results, and that is actually quite important here in
a few places. That doesn't apply to all of those methods though, anything that
returns views or other types without heap memory could be changed indeed.
> P.S: Also created two small MRs that seemed simple enough.
Regards,
Volker
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 195 bytes
Desc: This is a digitally signed message part.
URL: <http://mail.kde.org/pipermail/kde-pim/attachments/20250929/06d137fc/attachment.sig>
More information about the kde-pim
mailing list