As some of you might already know, LibreOffice has had the ability to use Mozilla Themes (Personas) for some time (Tools > Options > Personalization); but it kept breaking all the time, and never had an acceptable UX. Also tons of errors/warnings, and very slow search and apply processes almost brought it to the point of being killed for good.

But I couldn’t let it die, started looking into the related code and the bug reports. These might be some of the possible reasons why I couldn’t let it die:

• It was a tiny silly feature, which brings some colour/fun to the UI
• It might add to the level of emotional adoption by users
• There were user requests
• I already touched the code before

First thing to do was to fix the search functionality to make it operational again. It was broken because of some small changes in the source code of the persona pages on the Mozilla side.

Then I started fixing some small issues, and looking into ways to improve the under-the-hood part of the Personas dialog. It turned out that the dialog was fetching many web pages and parsing them to find the useful pieces on every search; and there was no caching. And the fetcher code, based on Neon, was also buggy, and was causing a lot of issues on its own.

After some web debugging and searching on the web and inside our own code-base, I have found the new API of Mozilla, which was returning JSON data, consisting of all of the useful info about each theme; and realized that we could simply use curl to fetch the data we need. (It seemed, to me, faster and simpler than Neon.)

Here is a summary of what has been done so far:

• Make the search functional again
• Fix some crashers
• Refactor to improve performance, readability, stability, and to make the code future-proof
• Modernize under-the-hood part
• Reveal & polish the buried sub-features like preinstalled/bundled themes
• Some other small bug fixes and improvements

From all, the under-the-hood patch had a major positive impact on the dialog, fixing multiple bugs at the same time, and preventing some more. After this commit:

• The initial search time went down from ~40 seconds to ~6 seconds
• The subsequent searches for the same term went down to ~3 seconds from ~40 seconds
• So the search process became much much faster and more stable

And this is the commit message:

Modernize personas under-the-hood - The search

* Upgrade the used mozilla API from v1.5 to v3
* Ditch Neon for curl
* Get rid of the get-HTML-then-search-within craziness

It is much faster and smarter now:
* Fetches the search results at once in JSON format,
instead of repetitively making http calls for each persona,
and relying on an ever-changing HTML design