Pachli 2.3.0 released

Pachli 2.3.0 is now available. This version contains UI improvements, assorted bug fixes, and continues support for non-Mastodon servers.

Read on for more details about these, and other changes in this release.

Under the hood

I wouldn’t normally call out invisible changes, but this has the potential to impact your experience.

This release changes how Pachli parses the data it receives from your server. This should make Pachli more reliable and performant when servers send correct data, and it should surface problems when servers send broken data much faster, leading to fewer crashes.

If your account worked with Pachli 2.2.0 and you’re having problems with 2.3.0 I am extremely interested in hearing about it, either via a bug report or e-mail to team@pachli.app, so (a) these issues can be reported to the server developers, and (b) I can temporarily work around them in Pachli.

Keep reading if you want to know why this change has happened, or skip ahead to New features and other improvements.

Non-technical explanation

Suppose you’ve been told to find the average of 10 numbers and pass the average on to someone else who will perform more calculations with it.

Simple, just add them up and divide by 10. Now suppose sometimes you don’t get 10 numbers. You get 9 numbers and a blank. Or 7 numbers and 3 things that aren’t numbers at all. But you’re still dividing by 10 every time. Sometimes your calculations are going to be wrong, possibly very wrong. But unless you carefully check the data you’re receiving you won’t notice, and the person you’re sending the average to is now getting bad data.

That’s what Pachli was doing. It had expectations for the data it was going to receive from your server, but if your server returned incorrect data Pachli might not notice at the time it received the data. This could cause strange behaviour or crashes long after the data was received.

Pachli is now stricter about the data it considers valid. To continue the analogy it will either (a) use 0 if any numbers are missing, or (b) show an error if any of the data is not numbers.

Technical explanation

Pachli used to parse incoming JSON data using the Gson library. This has an interesting misfeature; if you declare a property as non-null on your Java object, but the property is null in the incoming JSON, then Gson will cheerfully create a Java object where the property is actually null.

So there’s no error at the point where the JSON is parsed, but you may get a NullPointerException in code that’s far from where the data originated, and with a value that absolutely should not be null. See Using GSON with Kotlin’s Non-Null Types, or Safe Parsing Kotlin Data-classes with Gson for a more detailed explanation. This is not a theoretical problem, see #4226 for one example of it causing real-world crashes.

Pachli has switched to Moshi to parse JSON. Moshi doesn’t have this problem; it’s also faster at deserialising JSON and uses less memory, so win-win.

The tradeoff is the code has to do extra work to guard against malformed input. To be very clear, the extra work should have happened when Gson was used, but because Gson would blindly accept invalid data it was difficult to know you needed to.

Pachli now does the extra work. I’ve probably caught all the edge-cases I care about, but you never know. If you’ve read this far you might be interested in weird server responses.

New features and other improvements

Previewing and playing media

If you’re playing media (audio or video) your device’s screen will now automatically stay on while playing. This was suggested by Markus Seifert, their first contribution to the project.

If an audio file attachment has a preview image – for example, album artwork – it is now shown.

The “Media” tab for an account now shows the media in a staggered grid. This means the images are not cropped, so you can see a thumbnail of the entire image before deciding if you want to view it.

These screenshots show the Georgia Museum of Art’s account before and after these changes.

Before, images are cropped After, images are uncropped

Checking for updates

Pachli can periodically check for updates and prompt you to install them. If enabled these checks happen approximately once per day. You can now trigger a manual check in the “Software updates” Preferences section.

Notification improvements

If you use ntfy.sh then Pachli now tells Android to expedite the work to fetch Mastodon notifications. This may lead to notifications appearing more reliably (#440).

The “About” screen now has a tab showing more details about how and when Pachli is receiving notifications from your Mastodon account. Hopefully you won’t need this, but if you encounter notification problems this will be very useful when troubleshooting. There is a separate blog post for debugging notifications with much more detail about this.

Disable filter functionality if you use Firefish

Release 2.2.0 started adjusting Pachli’s behaviour depending on the type of server you use, and that’s been extended in this release.

If your account is on a server running Firefish then filtering functionality is disabled, because Firefish does not currently support Mastodon filters. This was reported by Deividas Paukštė in #248.

In Pachli you will see the the “Account > Filters” option is disabled, and the option to mute hashtags is missing, as muting a hashtag involves creating a filter for the hashtag.

Users of other server types should not see any behaviour changes.

Per the Pachli roadmap full support for features offered by non-Mastodon servers, like post reactions, different post visibility options, or quoting is planned for the 5.x release later this year. Releasing this limited change now provides an opportunity to shake out any bugs with server detection and improve the code.

This work is uncovering many bugs in Mastodon and Mastodon-like servers, including:

Friendica

I’d like to take a moment to call out to the Friendica developers, they’ve been very responsive to these issues, and foss- who has been reporting them when they encounter them in Pachli.

Glitch

Mastodon

Pixelfed

Pleroma

Updates to translations

Languages with updated translations are:

If you would like to help improve Pachli’s translation in to your language there’s information on how you can contribute.

Significant bug fixes

Show the correct account UI after “Compose” from a notification

If

  • You received an Android notification
  • You used the “Compose” option from the notification
  • You were logged in with at least two accounts, A and B
  • The notification was for account B, but you were currently logged in with account A

then after leaving the “Compose” screen you would be logged in as account B, but the UI indicating your account (e.g., your profile picture) would still show account A. This could obviously lead to user confusion, and was fixed in #445.

Improved interaction counter display at larger font sizes

Piky Nieves explained how at large font sizes the (optional) counters at the bottom of posts could crash in to the icons. That was fixed in #457.

Display of changes to edited posts

As well as contributing translations, JuanM reported (their first Pachli bug report) that no matter what font you had chosen in Pachli’s preferences, viewing an edited post always showed any added text in the system font. This was fixed in #453.

Edits to posts from servers running Akkoma should now also appear correctly, #446.

Thank you

Thank you to everyone who took the time to report issues and provide additional followup information and screenshots.

Download Pachli 2.3.0 from Google Play, F-Droid, or the GitHub release page.